UNPKG

ts-data-forge

Version:

[![npm version](https://img.shields.io/npm/v/ts-data-forge.svg)](https://www.npmjs.com/package/ts-data-forge) [![npm downloads](https://img.shields.io/npm/dm/ts-data-forge.svg)](https://www.npmjs.com/package/ts-data-forge) [![License](https://img.shields.

237 lines 8.14 kB
import { IMap } from '../../collections/index.mjs'; /** * Finds the minimum value in an array. * * @example * * ```ts * const values = [5, 3, 9] as const; * * const empty: readonly number[] = []; * * const smallest = Arr.min(values); * * const none = Arr.min(empty); * * const custom = Arr.min(values, (a, b) => b - a); * * assert.deepStrictEqual(smallest, Optional.some(3)); * * assert.deepStrictEqual(none, Optional.none); * * assert.deepStrictEqual(custom, Optional.some(9)); * ``` */ export declare function min<const Ar extends readonly number[]>(array: Ar, comparator?: (x: Ar[number], y: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; export declare function min<const Ar extends readonly unknown[]>(array: Ar, comparator: (x: Ar[number], y: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; /** * Finds the maximum value in an array. * * @example * * ```ts * const values = [5, 3, 9]; * * const largest = Arr.max(values); * * const reversed = Arr.max(values, (a, b) => b - a); * * assert.deepStrictEqual(largest, Optional.some(9)); * * assert.deepStrictEqual(reversed, Optional.some(3)); * ``` */ export declare function max<const Ar extends readonly number[]>(array: Ar, comparator?: (x: Ar[number], y: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; export declare function max<const Ar extends readonly unknown[]>(array: Ar, comparator: (x: Ar[number], y: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; /** * Finds the element with the minimum mapped value. * * @example * * ```ts * const users = [ * { id: 1, visits: 10 }, * { id: 2, visits: 3 }, * { id: 3, visits: 5 }, * ] as const; * * const leastVisits = Arr.minBy(users, (user) => user.visits); * * const custom = Arr.minBy( * users, * (user) => user.visits, * (a, b) => b - a, * ); * * assert.deepStrictEqual(leastVisits, Optional.some({ id: 2, visits: 3 })); * * assert.deepStrictEqual(custom, Optional.some({ id: 1, visits: 10 })); * ``` */ export declare function minBy<const Ar extends readonly unknown[]>(array: Ar, comparatorValueMapper: (value: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; export declare function minBy<const Ar extends readonly unknown[], V>(array: Ar, comparatorValueMapper: (value: Ar[number]) => V, comparator: (x: V, y: V) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; /** * Finds the element with the maximum mapped value. * * @example * * ```ts * const projects = [ * { id: 'a', stars: 10 }, * { id: 'b', stars: 30 }, * { id: 'c', stars: 20 }, * ]; * * const mostStars = Arr.maxBy(projects, (project) => project.stars); * * const smallestStars = Arr.maxBy( * projects, * (project) => project.stars, * (a, b) => b - a, * ); * * assert.deepStrictEqual(mostStars, Optional.some({ id: 'b', stars: 30 })); * * assert.deepStrictEqual(smallestStars, Optional.some({ id: 'a', stars: 10 })); * ``` */ export declare function maxBy<const Ar extends readonly unknown[]>(array: Ar, comparatorValueMapper: (value: Ar[number]) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; export declare function maxBy<const Ar extends readonly unknown[], V>(array: Ar, comparatorValueMapper: (value: Ar[number]) => V, comparator: (x: V, y: V) => number): Ar extends NonEmptyArray<unknown> ? Some<Ar[number]> : Optional<Ar[number]>; /** * Counts the number of elements that satisfy a predicate. * * @example * * ```ts * const words = ['Ada', 'Grace', 'Linus'] as const; * * const longWords = Arr.count(words, (word) => word.length > 4); * * const withCurried = Arr.count<string>((word) => word.includes('a'))(words); * * assert.isTrue(longWords === 2); * * assert.isTrue(withCurried === 2); * ``` */ export declare function count<const Ar extends readonly unknown[]>(array: Ar, predicate: (value: Ar[number], index: ArrayIndex<Ar>) => boolean): SizeType.Arr; export declare function count<E>(predicate: (value: E, index: SizeType.Arr) => boolean): (array: readonly E[]) => SizeType.Arr; /** * Groups elements by a key and counts the elements in each group. * * @example * * ```ts * const words = ['Ada', 'Grace', 'Alan', 'Barbara'] as const; * * const counts = Arr.countBy(words, (word) => word[0]); * * assert.deepStrictEqual(counts.get('A'), Optional.some(2)); * * assert.deepStrictEqual(counts.get('G'), Optional.some(1)); * * assert.deepStrictEqual(counts.get('B'), Optional.some(1)); * ``` */ export declare function countBy<const Ar extends readonly unknown[], G extends MapSetKeyType>(array: Ar, grouper: (value: Ar[number], index: ArrayIndex<Ar>) => G): IMap<G, ArrayIndex<Ar>>; export declare function countBy<E, G extends MapSetKeyType>(grouper: (value: E, index: SizeType.Arr) => G): (array: readonly E[]) => IMap<G, SizeType.Arr>; /** * Reduces an array to a single value from left to right. * * @example * * ```ts * const words = ['Ada', 'Lovelace']; * * const totalLength = Arr.foldl(words, (acc, word) => acc + word.length, 0); * * const concat = Arr.foldl<string | number, string>( * (acc, value) => `${acc}-${value}`, * 'items', * )(words); * * assert.isTrue(totalLength === 11); * * assert.isTrue(concat === 'items-Ada-Lovelace'); * ``` */ export declare function foldl<const Ar extends readonly unknown[], P>(array: Ar, callbackfn: (previousValue: P, currentValue: Ar[number], currentIndex: ArrayIndex<Ar>) => P, initialValue: P): P; export declare function foldl<E, P>(callbackfn: (previousValue: P, currentValue: E, currentIndex: SizeType.Arr) => P, initialValue: P): (array: readonly E[]) => P; /** * Reduces an array to a single value from right to left. * * @example * * ```ts * const numbers = [1, 2, 3]; * * const subtractRight = Arr.foldr(numbers, (acc, value) => acc - value, 0); * * const joinFromRight = Arr.foldr<number, string>( * (acc, value) => `${acc}${value}`, * '', * )(numbers); * * assert.isTrue(subtractRight === -6); * * assert.isTrue(joinFromRight === '321'); * ``` */ export declare function foldr<const Ar extends readonly unknown[], P>(array: Ar, callbackfn: (previousValue: P, currentValue: Ar[number], currentIndex: ArrayIndex<Ar>) => P, initialValue: P): P; export declare function foldr<E, P>(callbackfn: (previousValue: P, currentValue: E, currentIndex: SizeType.Arr) => P, initialValue: P): (array: readonly E[]) => P; /** * Calculates the sum of numbers in an array. * * @example * * ```ts * const numbers = [1, 2, 3, 4] as const; * * const negatives = [3, -2, 5] as const; * * const total = Arr.sum(numbers); * * const totalNegatives = Arr.sum(negatives); * * assert.isTrue(total === 10); * * assert.isTrue(totalNegatives === 6); * ``` */ export declare function sum(array: readonly []): 0; export declare function sum<N extends number>(array: readonly [N]): N; export declare function sum(array: readonly Uint[]): Uint; export declare function sum(array: readonly Int[]): Int; export declare function sum(array: readonly number[]): number; /** * Joins array elements into a string. * * @example * * ```ts * const numbers = [1, 2, 3] as const; * * const defaultSeparator = Arr.join(numbers); * * const hyphenSeparated = Arr.join(numbers, '-'); * * assert.deepStrictEqual(defaultSeparator, Result.ok('1,2,3')); * * assert.deepStrictEqual(hyphenSeparated, Result.ok('1-2-3')); * ``` */ export declare function join(array: readonly unknown[], separator?: string): Result<string, Error>; export declare function join(separator?: string): (array: readonly unknown[]) => Result<string, Error>; /** * Alias for `foldl`. * * @see {@link foldl} */ export declare const reduce: typeof foldl; /** * Alias for `foldr`. * * @see {@link foldr} */ export declare const reduceRight: typeof foldr; //# sourceMappingURL=array-utils-reducing-value.d.mts.map