1. Qiita
  2. 投稿
  3. Node.js

Javascriptでオブジェクトの配列をKey/Valueでソートする関数

  • 30
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

オブジェクトの配列をオブジェクトのキー/値をもとにソートしたいと思ったときに作った関数を公開します。Node.jsでしか挙動確認していません。

対象となるオブジェクトの配列の構造

あくまで例です。

[ 
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'Qiitaのデザイン',  
    thread_id: 34,
    read_status: 0,
    newest_time: Wed Jun 04 2014 04:45:25 GMT+0000 (UTC),
    id: 1298 },
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'aaa',
    thread_id: 37,
    read_status: 0,
    id: 1356 },
  { user_name: '菅原 遼介',
    area: '台中市',
    title: 'フルスタックな営業募集',
    thread_id: 36,
    newest_time: Fri Jun 06 2014 03:52:30 GMT+0000 (UTC),
    id: 1353 }
]

複数のオブジェクトが配列の中にある感じです。=> [{...},{...},{...}]

このときに例えばidが若い順番にオブジェクトをソートしたいってことがあると思います。これを実現する関数を作ってみました。

自作した関数

実際にはNode.jsで利用しているのでコールバック出来るようにしています。

  • 第1引数: オブジェクトの配列 [Array]
  • 第2引数: ソートの軸にしたいキー名 [String]
  • 第3引数: 降順(desc)か昇順(asc)か [String]
  • 第4引数: コールバック関数
object_array_sort.js

  function object_array_sort(data,key,order,fn){
    //デフォは降順(DESC)
    var num_a = -1;
    var num_b = 1;

    if(order === 'asc'){//指定があれば昇順(ASC)
      num_a = 1;
      num_b = -1;
    }

   data = data.sort(function(a, b){
      var x = a[key];
      var y = b[key];
      if (x > y) return num_a;
      if (x < y) return num_b;
      return 0;
    });

   fn(data); // ソート後の配列を返す
  }

使い方

idの値が若い順に並び替えている例です。

index.js

var data =  [{...},{...},{...}]; //利用したいオブジェクト配列

object_array_sort(data, 'id', 'asc', function(new_data){
    //ソート後の処理
    console.log(new_data); //
});

結果

idが若いオブジェクトの順番にソートがされました。

[ 
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'Qiitaのデザイン',  
    thread_id: 34,
    read_status: 0,
    newest_time: Wed Jun 04 2014 04:45:25 GMT+0000 (UTC),
    id: 1298 },
  { user_name: '菅原 遼介',
    area: '台中市',
    title: 'フルスタックな営業募集',
    thread_id: 36,
    newest_time: Fri Jun 06 2014 03:52:30 GMT+0000 (UTC),
    id: 1353 },
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'aaa',
    thread_id: 37,
    read_status: 0,
    id: 1356 }
]

良かったらツッコミとか待ってます!

参考: WEB開発備忘録 Javascriptで、連想配列(ハッシュ/hash)のキーを変数で指定するには? -
参考: [JavaScript]配列の配列・オブジェクトの配列をソート | 言葉の海のプログラマー -

Comments Loading...