Iterator.prototype.reduce()
Baseline
2025
Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Iterator 实例的 reduce() 方法类似于 Array.prototype.reduce:它对迭代器生成的每个元素执行用户提供的“reducer”回调函数,并传入前一个元素的计算结果作为参数。对所有元素运行 reducer 回调函数的最终结果为单个值。
语法
reduce(callbackFn)
reduce(callbackFn, initialValue)
参数
callbackFn-
为迭代器生成的每个元素执行的函数。其返回值将作为下一次调用
callbackFn时accumulator参数。对于最后一次调用,它的返回值成为reduce()的返回值。该函数被调用时将传入以下参数:accumulator-
上一次调用
callbackFn的结果。在第一次调用时,如果指定了initialValue则为指定的值,否则为迭代器第一个元素的值。 currentValue-
当前元素的值。在第一次调用时,如果指定了
initialValue,则为迭代器第一个元素的值,否则为迭代器第二个元素的值。 currentIndex-
currentValue的索引位置。在第一次调用时,如果指定了initialValue则为0,否则为1。
initialValue可选-
第一次调用回调时初始化
accumulator的值。如果指定了initialValue,则callbackFn从第一个元素作为currentValue开始执行。如果没有指定initialValue,则accumulator初始化为第一个元素,并且callbackFn从第二个元素作为currentValue开始执行。在这种情况下,如果迭代器为空(没有第一个值可以作为accumulator返回),则会抛出错误。
返回值
在整个迭代器上运行“reducer”回调函数直至其完成所返回的结果。
异常
TypeError-
如果迭代器没有包含任何元素并且没有提供
initialValue,则抛出该异常。
描述
参见 Array.prototype.reduce() 以了解 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
规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.prototype.reduce> |
浏览器兼容性
Loading…