2013年9月25日水曜日

[JavaScript]JSONデータのソート

JSON配列データを指定したプロパティでソートする方法をご紹介します。
Webアプリ開発などでよく使うテクニックですが、つい忘れがちなのでメモしておきます。
特定のライブラリに依存しない方法ですから、気軽に使えると思います。



var data = [
  {
    "id": "10",
    "name": "A"
  }, {
    "id": "4",
    "name": "B"
  }, {
    "id": "22",
    "name": "C"
  }
];

// ソート関数
var sort_by = function(prop_name, reverse, primer){
  reverse = (reverse) ? -1 : 1;
  return function(a,b){
    a = a[prop_name];
    b = b[prop_name];
    if (typeof(primer) != 'undefined'){
      a = primer(a);
      b = primer(b);
    }
    if (a < b) return reverse * -1;
    if (a > b) return reverse * 1;
    return 0;
  }
}

// プロパティ「id」を整数としてソート
data.sort(sort_by('id', false, parseInt));
console.log(JSON.stringify(data, null, 2));

/* 出力結果
[
  {
    "id": "4",
    "name": "B"
  },
  {
    "id": "10",
    "name": "A"
  },
  {
    "id": "22",
    "name": "C"
  }
] 
*/

// プロパティ「name」を文字列としてソート
data.sort(sort_by('name', false, function(a){ 
  return a.toUpperCase();
}));
console.log(JSON.stringify(data, null, 2));

/* 出力結果
[
  {
    "id": "10",
    "name": "A"
  },
  {
    "id": "4",
    "name": "B"
  },
  {
    "id": "22",
    "name": "C"
  }
] 
*/

動作確認は Chrome バージョン 28.0.1500.71 で行いました。


参考にしたサイト

JSONデータをソートする方法: 小粋空間

0 件のコメント:

コメントを投稿