【JS/TS】オブジェクト配列のキー指定で並び替えする
もくじ
はじめに
JavaScript や TypeScript において、並び替えしたいのはオブジェクト配列なのにただの配列の並び替えばかりがヒットしたので自分用の記録です。
並び替えしたいデータ
- オブジェクト配列
var array = [ {'no': 1, 'name': 'Hanako', 'birthday': 1007305200}, {'no': 2, 'name': 'Mitsue', 'birthday': 971190000}, {'no': 3, 'name': 'Nobu', 'birthday': 1293807600}, {'no': 4, 'name': 'Takashi', 'birthday': 1263135600}, ];
今回birthday
はタイムスタンプを用いています。
sort
関数
昇順
array = array.sort(function (a, b) { return a.birthday - b.birthday; });
↓短縮
array = array.sort((a,b) => a.birthday - b.birthday )
降順
array = array.sort(function (a, b) { return b.birthday - a.birthday; });
↓短縮
array = array.sort((a,b) => b.birthday - a.birthday )
すこし解説
sort
の中にある関数について。
function (a, b) { return a.birthday - b.birthday; }
これは compareFunction (比較関数) でありソート順を定義する関数です。
比較したいものを引数で渡します。この場合で言うとa
とb
ですね。そしてa
とb
を比較(マイナス)することで「プラスなら左辺が大きく、マイナスなら右辺が大きい」という結果を返すのです。
その結果をsort
関数の引数に渡して並び替えをしています。
結果
昇順
array = [ {'no': 2, 'name': 'Mitsue', 'birthday': 971190000}, {'no': 1, 'name': 'Hanako', 'birthday': 1007305200}, {'no': 4, 'name': 'Takashi', 'birthday': 1263135600}, {'no': 3, 'name': 'Nobu', 'birthday': 1293807600}, ];
降順
array = [ {'no': 3, 'name': 'Nobu', 'birthday': 1293807600}, {'no': 4, 'name': 'Takashi', 'birthday': 1263135600}, {'no': 1, 'name': 'Hanako', 'birthday': 1007305200}, {'no': 2, 'name': 'Mitsue', 'birthday': 971190000}, ];