# reduce

## reduce() function​

Also known as foldl, this method boils down a list of values into a single value.

Signature:
``declare function reduce<T>(f: SyncReducer<T, T>, iterable: Iterable<T>): T;declare function reduce<T, Acc>(f: SyncReducer<Acc, T>, iterable: Iterable<T>): Acc;declare function reduce<T>(f: SyncReducer<T, T>, iterable: AsyncIterable<T>): Promise<T>;declare function reduce<T extends readonly [], Acc>(f: Arrow, seed: Acc, iterable: T): Acc;declare function reduce<T, Acc>(f: SyncReducer<Acc, T>, seed: Acc, iterable: Iterable<T>): Acc;declare function reduce<T, Acc>(f: AsyncReducer<Acc, T>, iterable: AsyncIterable<T>): Promise<Acc>;declare function reduce<T, Acc>(f: AsyncReducer<Acc, T>, seed: Acc | Promise<Acc>, iterable: AsyncIterable<T>): Promise<Acc>;declare function reduce<T extends Iterable<unknown> | AsyncIterable<unknown>, Acc>(f: AsyncReducer<Acc, IterableInfer<T>>): (iterable: T) => ReturnValueType<T, Acc>;declare function reduce<T extends Iterable<unknown> | AsyncIterable<unknown>>(f: AsyncReducer<IterableInfer<T>, IterableInfer<T>>): (iterable: T) => ReturnValueType<T>;``

## Example​

You can reduce values into homogeneous type.

``const sum = (a:number, b:number) => a + b;// with implicit seed with first elementreduce(sum, [1, 2, 3, 4]); // 10// with explicit seedreduce(sum, 0, [1, 2, 3, 4]); // 10``

You can reduce values into heterogeneous type.

``// reduce { id: number; score: number; } to numberreduce((acc, value) => acc + value.score, 0, [ { id: 0, score: 1 }, { id: 5, score: 2 }, { id: 9, score: 3 }, { id: 3, score: 4 }])``

Omitting iterable will returns function, useful when using with pipe.

``pipe( [1, 2, 3, 4], map(a => a + 10), filter(a => a % 2 === 0), reduce(sum),); // 26``

For backward compatibility, `reduce` can support partial lazy form. You may want to use `reduceLazy` to use `seed`.

``await pipe( Promise.resolve([1, 2, 3, 4]), map((a) => a + 10), filter(a => a % 2 === 0), reduce(sum),); // 26// if you want to use asynchronous callbackawait pipe( Promise.resolve([1, 2, 3, 4]), toAsync, map(async (a) => a + 10), filter(a => a % 2 === 0), reduce(sum),); // 26// with toAsyncawait pipe( [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), Promise.resolve(4)], toAsync, map(a => a + 10), filter(a => a % 2 === 0), reduce(sum),); // 26``

Try It

see pipe, toAsync, map, filter

Open Source Code