オブジェクトの配列をオブジェクトのキー/値をもとにソートしたいと思ったときに作った関数を公開します。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]配列の配列・オブジェクトの配列をソート | 言葉の海のプログラマー -