Multidimensional Sort
by iamjoshhansen
JavaScript 1.7
function byObjectValues(keys) {
return function(a, b) {
const firstKey = keys[0];
const isSimple = typeof firstKey === 'string';
const key = isSimple ? firstKey : firstKey.key;
const rev = isSimple ? false : !!firstKey.reverse;
const map = isSimple ? null : firstKey.map || null;
const valA = map ? map(a[key]) : a[key];
const valB = map ? map(b[key]) : b[key];
if (valA === valB) {
if (keys.length === 1) {
return 0;
}
return byObjectValues(keys.slice(1))(a, b);
}
if (rev) {
return valA > valB ? -1 : 1;
}
return valA > valB ? 1 : -1;
};
}