2 回答
![?](http://img1.sycdn.imooc.com/5458472300015f4702200220-100-100.jpg)
TA贡献1836条经验 获得超13个赞
因为这就是它的设计目的 - 它将始终循环遍历数组中的所有项目,就像大多数其他数组方法一样forEach,例如和map。
如果过了某个时间点,您想有效地忽略之后发生的事情,只需返回当前累加器,例如:
const partialSum = [1, 2, 3, 4].reduce((a, num) => {
if (a > 3) {
return a;
}
return a + num;
}, 0);
console.log(partialSum);
如果你想在数组中找到一个元素,你应该使用.find,它会在找到匹配项后立即终止循环:
const arr = [
{ prop: 'foo' },
{ prop: 'bar' },
{ prop: 'baz' }
];
const foundBar = arr.find((obj) => {
console.log('iteration');
return obj.prop === 'bar';
});
Athrow 确实会跳出 a .reduce(尽管您不应该使用错误进行控制流):
[1, 2, 3, 4, 5].reduce((a, num) => {
console.log('iteration');
if (num > 2) {
throw new Error();
}
});
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
TA贡献1893条经验 获得超10个赞
如果您的代码库似乎经常需要在 a 内部中断reduce
,那么改用for
循环可能是一个更好的主意。但是,如果您绝对必须使用reduce
并且需要从内部中断,则可以使用以下选项之一:
在您需要中断的点之后,返回当前累加器而不更改每个元素。
使用
throw
打破了出来reduce
的方法,但不建议这样做。4th
改变 reducer 函数的参数,它是被迭代的数组。如果将其变异为空数组,reduce
则将退出。小心这一点,因为它可能会产生不必要的副作用。
reduce
旨在迭代数组中的所有元素,因此这就是为什么要突破它并不容易、不常见或不推荐的原因。这也是为什么有这么多其他数组操作方法的原因,理论上reduce
可以在给定适当功能的情况下替换所有这些方法,但是它存在其他数组方法没有的某些限制。
添加回答
举报