Skip to main content

Function: compose()

compose<T>(...comparators): Comparator<T>

Defined in: compare/combinators/index.ts:43

Composes multiple comparators into a single comparator with priority ordering.

Applies comparators in order: if the first comparator returns 0 (equal), tries the second, and so on. This enables multi-level sorting like "sort by status, then by priority, then by date".

Type Parameters

T

T

Parameters

comparators

...Comparator<T>[]

Comparators in priority order (first = highest priority)

Returns

Comparator<T>

A composed comparator

Example

interface Issue {
status: 'open' | 'closed'
priority: 'low' | 'medium' | 'high'
createdAt: Date
}

const issues: Issue[] = [
{ status: 'open', priority: 'high', createdAt: new Date('2024-01-03') },
{ status: 'open', priority: 'low', createdAt: new Date('2024-01-01') },
{ status: 'closed', priority: 'high', createdAt: new Date('2024-01-02') },
{ status: 'open', priority: 'high', createdAt: new Date('2024-01-04') }
]

// Sort by: status (open first), then priority (high first), then date (oldest first)
const priorityOrder = { high: 0, medium: 1, low: 2 }
const statusOrder = { open: 0, closed: 1 }

issues.sort(
compose(
ascending(i => statusOrder[i.status]),
ascending(i => priorityOrder[i.priority]),
ascending(i => i.createdAt)
)
)

See

withTiebreaker - for explicit two-level sorting