Hyperlinkv0.8.0-beta.28

Array

Array.sortWithconsteffect/Array.ts:2112
<S extends Iterable<any>, B>(
  f: (a: ReadonlyArray.Infer<S>) => B,
  order: Order.Order<B>
): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
<A, B>(
  self: NonEmptyReadonlyArray<A>,
  f: (a: A) => B,
  O: Order.Order<B>
): NonEmptyArray<A>
<A, B>(self: Iterable<A>, f: (a: A) => B, order: Order.Order<B>): Array<A>

Sorts an array by a derived key using a mapping function and an Order for that key.

When to use

Use when you need to sort values by a derived key, such as a string length or object field, while keeping the original values.

Details

Equivalent to sort(Order.mapInput(order, f)), but more convenient.

Example (Sorting strings by length)

import { Array, Order } from "effect"

console.log(Array.sortWith(["aaa", "b", "cc"], (s) => s.length, Order.Number))
// ["b", "cc", "aaa"]
elementssortsortBy
Source effect/Array.ts:211212 lines
export const sortWith: {
  <S extends Iterable<any>, B>(
    f: (a: ReadonlyArray.Infer<S>) => B,
    order: Order.Order<B>
  ): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
  <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A) => B, O: Order.Order<B>): NonEmptyArray<A>
  <A, B>(self: Iterable<A>, f: (a: A) => B, order: Order.Order<B>): Array<A>
} = dual(
  3,
  <A, B>(self: Iterable<A>, f: (a: A) => B, order: Order.Order<B>): Array<A> =>
    Array.from(self).map((a) => [a, f(a)] as const).sort(([, a], [, b]) => order(a, b)).map(([_]) => _)
)
Referenced by 1 symbols