JavaScriptで多次元配列をソートする方法
以下の配列を想定
const lists = [
[ 1, 3 ],
[ 1, 2 ],
[ 2, 1 ],
[ 1, 1 ]
]
昇順
1つ目を第一優先
function sortArray(arr){
arr.sort((a,b) => {
return a[0] - b[0]
})
}
sortArray(lists);
// 出力
// [
// [ 1, 3 ],
// [ 1, 2 ],
// [ 1, 1 ],
// [ 2, 1 ]
// ]
2つ目を第一優先
function sortArray(arr){
arr.sort((a,b) => {
return a[1] - b[1]
})
}
sortArray(lists);
// 出力
// [
// [ 2, 1 ],
// [ 1, 1 ],
// [ 1, 2 ],
// [ 1, 3 ]
// ]
降順
1つ目を第一優先
function sortArray(arr){
arr.sort((a,b) => {
return b[0] - a[0]
})
}
sortArray(lists);
// 出力
// [
// [ 2, 1 ],
// [ 1, 3 ],
// [ 1, 2 ],
// [ 1, 1 ]
// ]
2つ目を第一優先
function sortArray(arr){
arr.sort((a,b) => {
return b[0] - a[0]
})
}
sortArray(lists);
// 出力
// [
// [ 1, 3 ],
// [ 1, 2 ],
// [ 2, 1 ],
// [ 1, 1 ]
// ]
複数キーの並び替え
1つ目を第一優先、2つ目を第二優先(いずれも昇順)
この場合、以下で出来た!!
function sortArray(arr){
arr.sort((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
})
}
// 出力
// [
// [ 1, 1 ],
// [ 1, 2 ],
// [ 1, 3 ],
// [ 2, 1 ]
// ]
もっとスマートな書き方ありましたら教えてください。
参考