Iterator.prototype.reduce()

基準線 2025
新推出

自 ⁨2025 年 3 月⁩ 起,此功能可在最新的裝置和瀏覽器版本上使用。此功能可能在舊裝置或瀏覽器上無法正常工作。

reduce() 方法,與 Array.prototype.reduce 類似,它會對迭代器產生的每個元素執行一個由使用者提供的“歸約”回撥函式,並將前一個元素計算的返回值作為引數傳遞給下一個元素的呼叫。跨所有元素執行歸約器的最終結果是一個單一值。

語法

js
reduce(callbackFn)
reduce(callbackFn, initialValue)

引數

callbackFn

為迭代器生成的每個元素執行的函式。它的返回值成為下一次呼叫 callbackFnaccumulator 引數的值。對於最後一次呼叫,返回值成為 reduce() 的返回值。該函式使用以下引數進行呼叫:

accumulator

由上一次呼叫 callbackFn 產生的值。第一次呼叫時,如果指定了 initialValue,則其值為 initialValue;否則,其值為迭代器的第一個元素。

currentValue

當前元素的值。第一次呼叫時,如果指定了 initialValue,則其值為迭代器的第一個元素;否則,其值為第二個元素。

currentIndex

currentValue 的索引位置。第一次呼叫時,如果指定了 initialValue,則其值為 0;否則,其值為 1

initialValue 可選

在第一次呼叫回撥函式時,accumulator 被初始化到的值。如果指定了 initialValue,則 callbackFn 將從第一個元素作為 currentValue 開始執行。如果指定 initialValue,則 accumulator 將被初始化為第一個元素,並且 callbackFn 將從第二個元素作為 currentValue 開始執行。在這種情況下,如果迭代器為空(因此沒有第一個值可以返回作為 accumulator),則會丟擲錯誤。

返回值

在整個迭代器上執行“歸約”回撥函式直到完成而產生的值。

異常

TypeError

如果迭代器不包含任何元素且未提供 initialValue,則丟擲此錯誤。

描述

有關 reduce() 如何工作的詳細資訊,請參閱 Array.prototype.reduce()。與大多數其他迭代器輔助方法不同,它不適合與無限迭代器一起使用,因為它不是惰性的。

示例

使用 reduce()

以下示例建立一個生成斐波那契數列項的迭代器,然後對前十項求和。

js
function* fibonacci() {
  let current = 1;
  let next = 1;
  while (true) {
    yield current;
    [current, next] = [next, current + next];
  }
}

console.log(
  fibonacci()
    .take(10)
    .reduce((a, b) => a + b),
); // 143

規範

規範
ECMAScript® 2026 語言規範
# sec-iterator.prototype.reduce

瀏覽器相容性

另見