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つの要素 a
と b
を受け取り、比較結果を返す関数です。
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' ]
]