JavaScript: 配列を複数のキーでソートする
JavaScript の配列をソートする場合、1つのキーだけでなく、 複数のキーでソートすることができます。
ここでは2次元配列を例に、複数のキーで配列をソートする(並べ替える) 方法を紹介します。
ソート対象の2次元配列
次のような「グループ」、「得点」、「名前」が入った2次元配列を想定します。
// グループ、得点、名前
let arr = [["a", 90, "田中"],
["b", 80, "鈴木"],
["a", 50, "山田"],
["b", 70, "坂本"],
["a", 20, "岡田"],
["b", 40, "山本"]
];
複数のキーでソートする
「グループ」と「得点」の2つをキーにソートします。
最初に「グループ」でソートし、次に「得点」でソート。
「グループ」は昇順(アルファベット順)、「得点」は降順とします。
以下がサンプルコードです。
// グループ、得点、名前
let arr = [["a", 90, "田中"],
["b", 80, "鈴木"],
["a", 50, "山田"],
["b", 70, "坂本"],
["a", 20, "岡田"],
["b", 40, "山本"]
];
// ソート
arr.sort(function(a, b){
if (a[0] > b[0]) return 1;
if (a[0] < b[0]) return -1;
// 得点は降順
if (a[1] > b[1]) return -1;
if (a[1] < b[1]) return 1;
return 0;
});
console.table(arr);
実行結果
最初に「グループ」はアルファベット順、 次に「得点」は降順にソートされているのが確認できます。
ポイントは次の部分です。
if (a[0] > b[0]) return 1;
if (a[0] < b[0]) return -1;
// 得点は降順
if (a[1] > b[1]) return -1;
if (a[1] < b[1]) return 1;
return 0;
a[0]・b[0]は「グループ」、a[1]・b[1]は「得点」を意味します。
優先するキーを先に記述し、2番目のキーを次に記述します。
まとめ
sort() メソッドを使って、配列を複数のキーでソートすることができます。
複数のキーのうち、優先するキーを先に記述し、2番目のキーを次に記述します。