Package: effect
Module: Array
Sorts an array by multiple Orders applied in sequence: the first order is
used first; ties are broken by the second order, and so on.
When to use
Use to sort by multiple criteria where later orders break ties from earlier ones.
Details
This is data-last only and returns a function. The return type preserves
NonEmptyArray.
Example (Sorting by multiple keys)
import { Array, Order, pipe } from "effect"
const users = [
{ name: "Alice", age: 30 },
{ name: "Bob", age: 25 },
{ name: "Charlie", age: 30 }
]
const result = pipe(
users,
Array.sortBy(
Order.mapInput(Order.Number, (user: (typeof users)[number]) => user.age),
Order.mapInput(Order.String, (user: (typeof users)[number]) => user.name)
)
)
console.log(result)
// [{ name: "Bob", age: 25 }, { name: "Alice", age: 30 }, { name: "Charlie", age: 30 }]
See
sort — sort by a single OrdersortWith — sort by a derived keySignature
declare const sortBy: <S extends Iterable<any>>(...orders: ReadonlyArray<Order.Order<ReadonlyArray.Infer<S>>>) => (self: S) => S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never
Since v2.0.0