README
comparing
Easily create descriptive comparators.
Features
- predefined Comparators for common use-cases
- lightweight
- easily sort arrays of objects via
compareBy
- compose or reverse predefined and custom Comparators
- define custom orders for enums or other arbitrary value sets
- create comparators that support type unions
Make sure to checkout the documentation.
Installation
npm i comparing
Usage
import {
naturalOrder,
reverseComparator,
composeComparators,
ignoreCase,
compareBy,
comparatorOfOrder,
Comparator,
} from 'comparing';
// chose from various available Comparators
const simple = [4, 1, 3, 5].sort(naturalOrder);
expect(simple).toEqual([1, 3, 4, 5]);
// start with your own simple function
const myCompareFn: Comparator<string> = (a, b) => a.charCodeAt(0) - b.charCodeAt(0);
// create "then ..." comparisons with compose
const complex: Comparator<string> = composeComparators([
// reverse any comparator
reverseComparator(myCompareFn),
// compare by a certain field or other values via `compareBy`
compareBy((x) => x.charAt(1), ignoreCase),
]);
const result = ['aB', 'bB', 'aa'].sort(complex);
expect(result).toEqual(['bB', 'aa', 'aB']);
// define your own order for known values
const myEnumComparator = comparatorForOrder([MyEnum.C, MyEnum.A, MyEnum.B]);
const myDataComparator = compareBy((data) => data.type, myEnumComparator);