【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 (比較関数) でありソート順を定義する関数です。

比較したいものを引数で渡します。この場合で言うとabですね。そしてabを比較(マイナス)することで「プラスなら左辺が大きく、マイナスなら右辺が大きい」という結果を返すのです。

その結果を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},
];

参考URL

Array.prototype.sort() - JavaScript | MDN