@pabra/sortby
Version:
Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.
38 lines • 1.13 kB
JavaScript
function isLower(left, right) {
return left < right;
}
function isGreater(left, right) {
return left > right;
}
function compareAsc(left, right) {
return isLower(left, right) ? -1 :
isGreater(left, right) ? 1 :
0;
}
function compareDesc(left, right) {
return isLower(left, right) ? 1 :
isGreater(left, right) ? -1 :
0;
}
export function by(...keys) {
const chain = keys.map(entry => {
const [keyOrExtractor, direction] = Array.isArray(entry)
? entry
: [entry, 'asc'];
const extractor = typeof keyOrExtractor === 'function'
? keyOrExtractor
: (thing) => thing[keyOrExtractor];
return [extractor, direction === 'asc' ? compareAsc : compareDesc];
});
return (left, right) => {
for (let i = 0, l = chain.length; i < l; i++) {
const [extractor, cmp] = chain[i];
const result = cmp(extractor(left), extractor(right));
if (result !== 0) {
return result;
}
}
return 0;
};
}
//# sourceMappingURL=index.js.map