【TypeScript】連想配列の複数キーを比較してSortする

JavaScriptのsort()を利用して連想配列の複数のキーを比較します。

公式はこちらです。

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()関数はとても汎用的に使用ができます。
引数が大きくなると可読性が落ちるので、関数にするなどして読みやすくしていきましょう。

よかったらシェアしてね!
目次