This solution seems to approximate the same functionality:
function sortBy (key, cb) {
if (!cb) cb = () => 0
return (a, b) => (a[key] > b[key]) ? 1
: ((b[key] > a[key]) ? -1 : cb(a, b))
}
function sortByDesc (key, cb) {
if (!cb) cb = () => 0
return (b, a) => (a[key] > b[key]) ? 1
: ((b[key] > a[key]) ? -1 : cb(b, a))
}
function orderBy (keys, orders) {
let cb = () => 0
keys.reverse()
orders.reverse()
for (const [i, key] of keys.entries()) {
const order = orders[i]
if (order == 'asc') {
cb = sortBy(key, cb)
} else if (order == 'desc') {
cb = sortByDesc(key, cb)
} else {
throw new Error(`Unsupported order "${order}"`)
}
}
return cb
}
// usage:
users.sort( orderBy( ['user', 'age'], ['asc', 'desc'] ) );
Source: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore/issues/280#issuecomment-690604745
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…