ts-data-forge
Version:
[](https://www.npmjs.com/package/ts-data-forge) [](https://www.npmjs.com/package/ts-data-forge) [;
*
* 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