Iterator.prototype.reduce()
reduce()
方法是 Iterator
实例的方法,类似于 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
规范
规范 |
---|
迭代器辅助函数 # sec-iteratorprototype.reduce |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。