JavaScriptのsort()を利用して連想配列の複数のキーを比較します。
公式はこちらです。
Array.prototype.sort() – JavaScript | MDN
sort() は Array のメソッドで、配列の要素をその場 (in-place) でソートし、ソートされた同じ配列の参照を返します。既定のソート順は昇順で、要素を文字列に変換してから…
sort()関数には、ソート順を定義する関数を渡すことができます。
sort()関数は元の配列への参照へアクセスします。
目次
連想配列の定義
連想配列を定義します。
SortTypeには作成日時(createdAt)と更新日時(updatedAt)を定義します。
updatedAtはフィールドが存在しないことも許容します。
export type SortType = {
createdAt: Date;
updatedAt?: Date;
};
const sortData: SortType[] = [
{
createdAt: new Date('2020-01-01'),
updatedAt: new Date('2020-02-01'),
},
{
createdAt: new Date('2020-01-01'),
updatedAt: new Date('2020-02-01'),
},
{
createdAt: new Date('2020-01-01'),
},
];
連想配列を複数キーでsort
連想配列の比較では、SortTypeオブジェクト毎に比較をします。
updatedAtプロパティが存在すればupdatedAdを利用し、なければcreatedAtを利用して比較しています。
dateA、dateB変数にそれぞれ格納し、より小さければ-1をかえし、大きければ1を返してソートをします。
下記の例ではデータは降順になります。
sortData.sort((a: SortType, b: SortType) => {
const dateA =
typeof a.updatedAt === 'undefined' ? a.updatedAt : a.createdAt;
const dateB =
typeof b.updatedAt === 'undefined' ? b.updatedAt : b.createdAt;
return dateA > dateB ? -1 : 1;
});
Summary
sort()関数はとても汎用的に使用ができます。
引数が大きくなると可読性が落ちるので、関数にするなどして読みやすくしていきましょう。