師匠の散歩Grandmaster Wander

JavaScriptのかけら5

  1. 一般のソート
  2. 配列のソート
  3. 連想配列のソート

ソート

文字列のソート

昇順ソート
sort()関数
降順ソート
逆順ソート
reverse()関数

JavaScriptでも、数字の並べ替えと文字列の並び替えで結果が異なるので注意が必要です。

2バイト文字はその文字コードの順に並び替えをするので、同じ漢字でも文字コードが違うと並び替える順序が異なる可能性があります。

  var data=[1,2,3,5,8,10,6,4,2.5,3.5,11];
  document.write("ソート前:"+data+"\n");
  document.write("逆順になるだけ:"+data.reverse()+"\n");  

  data.sort();
  document.write("コード降順に:"+data.reverse()+"\n");



数字のソート

昇順ソート
sort(function(a, b){return a - b;});
降順ソート
sort(function(a, b){return b - a;});

単純なソート関数は、文字列としての並び替えになります。これを数値の並び替えに変更するスクリプト(短縮形)は次のようになります。短縮形にする前の形とその内容理解は別ページで探してください。

ここで、宣言していない変数 a b が出てきますがここでは気にせずスルーしましょう。(Perlでも同様ですが)a,bはおまじないと思いましょう。

  var data=[1,2,3,5,8,10,6,4,2.5,3.5,11]; // []でくくると配列になる
  data.sort(function(a, b){return a - b;});

  data.sort(function(a, b){return b - a;});  // b-a とすることで逆順になる

次の関数は、前の配列を単純に逆順に並び替えを行う。

配列のソート

多次元配列での並び替えの説明ページはいくつか見つかりましたが、データ列の数字と文字を区別した説明ページを見つけることができなかったので、ここに作成しました。

検証内容の詳細はページソースのJavaScriptをご覧ください。簡単な例なので動作についてはご自分で確認されてもよいと思います。

ソース
// ----------------------------------------
// 多次元配列の並び替え
// 引数のチェックはしていない
//   arrs  : 配列
//   col   : 対象列
//   order : 1=昇順、-1=降順
// ----------------------------------------
// 数字での並び替え
// データにアラビア数字以外が出た時点でソートを中止する
function xsort(arrs, col, order){
    arrs.sort(function(a,b){
    return (a[col]-b[col])*order;
  });
  return arrs;
}
// 文字列での並び替え
// 2バイト文字はコード順だと思うがどの文字コードなのかは調べていない
function ysort(arrs, col, order){
  arrs.sort(function(a,b){
    var x = (a[col] > b[col]) ? order : -order;
    return x;
 //   if(a[col] > b[col]) return order;
 //   if (a[col] <  b[col]) return -order; // > htmlエディタ対応でタグを閉じている
 //   return 0;
  });
  return arrs;
}

連想配列の並び替え

現在鋭意修行中です。 m(__)m

function ObjArraySort(ary, key, order) {
  var reverse = 1;
  if(order !=1) reverse = -1;
  ary.sort(function(a, b) {
    if(a[key] < b[key])  // >
      return -1 * reverse;
    else if(a[key] == b[key])
      return 0;
    else
      return 1 * reverse;
    }
  );
}
var Arr = new Array();
 Arr = {
   {"rank1.8":1},
   {"rank2.5":2},
   {"rank1.2":3},
   {"rank8.4":4},
   {"rank5.5":5}
 };

なんかうまくいかん。


Topに戻る // 一覧に戻る
Copyright(C) Grandmaster since 2010最終更新:2016/4/21