Skip to content

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

采用 MIT 许可证发布。