reduceAsync
使用异步归约函数将数组归约为单个值。
typescript
const result = await reduceAsync(array, reducer, initialValue);参考
reduceAsync(array, reducer, initialValue)
当需要通过顺序处理每个元素将数组归约为单个值时,使用 reduceAsync。归约函数从左到右顺序应用于每个元素,将一个调用的累积结果传递给下一个调用。
typescript
import { reduceAsync } from 'es-toolkit/array';
// 获取每个数字的异步值并求和。
const numbers = [1, 2, 3, 4, 5];
const sum = await reduceAsync(numbers, async (acc, n) => acc + (await fetchValue(n)), 0);
// 返回:所有获取值的总和
// 将数组转换为对象。
const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
const userMap = await reduceAsync(
users,
async (acc, user) => {
const details = await fetchUserDetails(user.id);
acc[user.id] = details;
return acc;
},
{} as Record<number, any>
);
// 返回:{ 1: {...}, 2: {...}, 3: {...} }与其他异步数组方法不同,reduceAsync 必须顺序处理元素,不支持并发执行,因为下一步需要上一步的结果。
参数
array(readonly T[]):要归约的数组。reducer((accumulator: U, currentValue: T, currentIndex: number, array: readonly T[]) => Promise<U>):处理每个元素的异步函数。它接收累积值和当前值,并返回新的累积值。initialValue(U):累加器的初始值。
返回值
(Promise<U>):一个解析为最终累积值的 Promise。
reduceAsync(array, reducer)
在没有初始值的情况下归约数组时,第一个元素用作初始值,归约函数从第二个元素开始应用。
typescript
import { reduceAsync } from 'es-toolkit/array';
// 在没有初始值的情况下计算总和。
const numbers = [1, 2, 3, 4, 5];
const sum = await reduceAsync(numbers, async (acc, n) => acc + n);
// 返回:15 (1 + 2 + 3 + 4 + 5)
// 空数组返回 undefined。
const emptyArray: number[] = [];
const result = await reduceAsync(emptyArray, async (acc, n) => acc + n);
// 返回:undefined在没有初始值的情况下对空数组调用 reduceAsync 会返回 undefined。
参数
array(readonly T[]):要归约的数组。reducer((accumulator: T, currentValue: T, currentIndex: number, array: readonly T[]) => Promise<T>):处理每个元素的异步函数。它接收累积值和当前值,并返回新的累积值。
返回值
(Promise<T | undefined>):一个解析为最终累积值的 Promise。如果数组为空,则返回 undefined。

