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番目のキーを次に記述します。

JavaScript入門