JavaScript 二次元配列の特定のインデックスを基準にソート

JavaScriptをいじっていると、二次元配列の特定のインデックスを基準にソートをかけたい場合のメモ

以下のような2次元配列があったとする。

const data = [
  ['name1', '25', '08/08', 'nara'],
  ['name2', '30', '12/04', 'nagano'],
  ['name3', '14', '07/18', 'osaka'],
  ['name4', '44', '11/23', 'sapporo'],
  ['name5', '22', '06/02', 'osaka'],
  ['name6', '30', '03/03', 'ehime'],
  ['name7', '39', '12/25', 'kyoto'],
  ['name8', '29', '11/02', 'tokyo']
];

この配列に対して、インデックス1を基準にソートをかける場合

data.sort((a, b) => a[1] - b[1]);

この部分では、data 配列に対して sort() メソッドを呼び出し、配列をソートしています。

比較関数として以下の記述

(a, b) => a[1] – b[1]

この部分は、sort() メソッドに渡される比較関数です。

この関数は、2つの要素 ab を受け取り、比較結果を返す関数です。

  • a[1]b[1] を比較し、小さい方が先になるようにします。
    • a[1]b[1] は、それぞれ data 配列の要素の インデックス1 の値です。
    • インデックス1は、通常は 年齢 を格納している場所です。
    • つまり、この比較関数は、年齢を基準にソートを行うようにしています。
  • 比較結果は、数値として返されます。
    • a[1]b[1] より小さい場合は、負の値を返します。
    • a[1]b[1] より大きい場合は、正の値を返します。
    • a[1]b[1] が等しい場合は、0を返します。

出力は以下のようになる。

[
  [ 'name3', '14', '07/18', 'osaka' ],
  [ 'name5', '22', '06/02', 'osaka' ],
  [ 'name1', '25', '08/08', 'nara' ],
  [ 'name8', '29', '11/02', 'tokyo' ],
  [ 'name2', '30', '12/04', 'nagano' ],
  [ 'name6', '30', '03/03', 'ehime' ],
  [ 'name7', '39', '12/25', 'kyoto' ],
  [ 'name4', '44', '11/23', 'sapporo' ]
]

コメントを残す