Skip to main content

castComparator()

castComparator<Item, Key>(key, options?): (a, b) => number

castComparator<Item, MappedValue>(mapper, options?): (a, b) => number

Creates a comparator function for Array.sort() with flexible mapping and comparison options.

note

Null/undefined values sort last. Dates compare by timestamp. Uses localeCompare for strings.


Type Parametersโ€‹

Item: Itemโ€‹

The type of items being sorted.

Key: Key extends string | number | symbolโ€‹

The type of the property key.

MappedValue: MappedValueโ€‹

The type of the mapped value.


Parametersโ€‹

Overload 1:

key: Keyโ€‹

options?: ComparatorOptions<Item[Key]>โ€‹

Comparison options.

Overload 2:

mapper: (item) => MappedValueโ€‹

options?: ComparatorOptions<MappedValue>โ€‹

Comparison options.


Returns: (a, b): numberโ€‹

A comparator function for Array.sort().

a: Item
b: Item
Returns: number


Sinceโ€‹

2.0.0


Also known asโ€‹

castComparator (Radashi) ยท comparator (Ramda) ยท โŒ (Lodash, es-toolkit, Remeda, Effect, Modern Dash, Antfu)


Exampleโ€‹

const users = [{ name: 'John', age: 25 }, { name: 'Jane', age: 30 }];

users.sort(castComparator('age'));
// Sorted by age ascending

users.sort(castComparator((u) => u.name.length));
// Sorted by name length

users.sort(castComparator('age', { reverse: true }));
// Sorted by age descending

How it works?โ€‹

Creates a comparator function for Array.sort() from a property key or mapper function.

Property Key vs Mapper Functionโ€‹

Optionsโ€‹

Default Comparisonโ€‹

TypeComparison
numberNumeric subtraction
stringlocaleCompare
DateTimestamp comparison
null/undefinedSorted last

Use Casesโ€‹

Sort arrays by property ๐Ÿ“Œโ€‹

Create reusable comparators for Array.sort() with property names. Essential for clean, readable sorting code.

const users = [
{ name: "John", age: 25 },
{ name: "Jane", age: 30 }
];

users.sort(castComparator("age"));
// [{ name: "John", age: 25 }, { name: "Jane", age: 30 }]

Sort arrays by computed valuesโ€‹

Sort by computed values, custom comparison functions, and reverse order. Essential for complex sorting requirements.

const files = ["report.pdf", "image.png", "data.json"];

// Sort by extension length
files.sort(castComparator((f) => f.split(".").pop()?.length));

Sort in reverse orderโ€‹

Sort arrays in descending order with simple parameter. Essential for common reverse sorting needs.

users.sort(castComparator("age", { reverse: true }));
// [{ name: "Jane", age: 30 }, { name: "John", age: 25 }]

ComparatorOptions<ComparedValue>โ€‹

Interface

Options for the comparator function.


Sinceโ€‹

2.0.0


Type Parametersโ€‹

ComparedValue: ComparedValueโ€‹

The type of values being compared.


Propertiesโ€‹

compare()?: (a, b) => numberโ€‹

Custom comparison function.

a: ComparedValue
b: ComparedValue
Returns: number

reverse?: booleanโ€‹

If true, reverses the sort order.