Iterator.prototype.reduce()
reduce() 方法,與 Array.prototype.reduce 類似,它會對迭代器產生的每個元素執行一個由使用者提供的“歸約”回撥函式,並將前一個元素計算的返回值作為引數傳遞給下一個元素的呼叫。跨所有元素執行歸約器的最終結果是一個單一值。
語法
reduce(callbackFn)
reduce(callbackFn, initialValue)
引數
callbackFn-
為迭代器生成的每個元素執行的函式。它的返回值成為下一次呼叫
callbackFn時accumulator引數的值。對於最後一次呼叫,返回值成為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()
以下示例建立一個生成斐波那契數列項的迭代器,然後對前十項求和。
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 |
瀏覽器相容性
載入中…