UNPKG

@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
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