Skip to content

Instantly share code, notes, and snippets.

@DScheglov
Created October 6, 2020 12:26
Show Gist options
  • Save DScheglov/0f7e158da73ef29f87afcb563587a578 to your computer and use it in GitHub Desktop.
Save DScheglov/0f7e158da73ef29f87afcb563587a578 to your computer and use it in GitHub Desktop.
type ComparatorFn<T> = (a: T, b: T) => number;
type CasterFn<T> = (value: T) => number;
export const reverse = <T>(compare: ComparatorFn<T>): ComparatorFn<T> => (a: T, b: T) => -compare(a, b);
const combineComparators = <T>(compareA: ComparatorFn<T>, compareB: ComparatorFn<T>): ComparatorFn<T> =>
(a: T, b: T) => compareA(a, b) || compareB(a, b);
const voidComparator = <T>(a: T, b: T): number => 0;
export const combinedComparator = <T>(...comparators: ComparatorFn<T>[]): ComparatorFn<T> =>
comparators.length > 0
? comparators.reduce(combineComparators)
: voidComparator;
const sortBy = <T>(caster: CasterFn<T>): ComparatorFn<T> => (a: T, b: T) => caster(a) - caster(b);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment