减少和无法在 Javascript 中摆脱它到底是什么?

为什么我不能reduce在 Javascript 中跳出 a ?

看起来简单return甚至一个throw都不会破坏它。究竟为什么需要遍历所有值?


幕布斯7119047
浏览 182回答 2
2回答

开心每一天1111

因为这就是它的设计目的 - 它将始终循环遍历数组中的所有项目,就像大多数其他数组方法一样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();  }});

白猪掌柜的

如果您的代码库似乎经常需要在 a 内部中断reduce,那么改用for循环可能是一个更好的主意。但是,如果您绝对必须使用reduce并且需要从内部中断,则可以使用以下选项之一:在您需要中断的点之后,返回当前累加器而不更改每个元素。使用throw打破了出来reduce的方法,但不建议这样做。4th改变 reducer 函数的参数,它是被迭代的数组。如果将其变异为空数组,reduce则将退出。小心这一点,因为它可能会产生不必要的副作用。reduce旨在迭代数组中的所有元素,因此这就是为什么要突破它并不容易、不常见或不推荐的原因。这也是为什么有这么多其他数组操作方法的原因,理论上reduce 可以在给定适当功能的情况下替换所有这些方法,但是它存在其他数组方法没有的某些限制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript