入力によってソート基準が変わるような状況があったので探してもすぐ出てこなかったので作ってみた。
(ググり力が足りないのかもしれない)
/*
* keys: ソートキーの配列
* order: 1:asc -1:desc
*/
const genSortFunc = ( keys, order = 1 ) => (a, b) => {
return keys
.map( key => {
if (a[key] == b[key]) return 0
return order * ( a[key] > b[key] ? 1 : -1 )
})
.find( o => o != 0) || 0
}
const array = [
{name: 'a', key1: 1, key2: 1, key3: 1},
{name: 'b', key1: 0, key2: 1, key3: 0},
{name: 'c', key1: 1, key2: 0, key3: 0},
]
console.log( array.sort(genSortFunc(['key1','key2'])))
console.log( array.sort(genSortFunc(['key2','key3'])))
console.log( array.sort(genSortFunc(['key1','key2'], -1)))
map.findしなくても、forEachで0(等価)以外が出たところで落としたほうが速いかも。