首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提前中断reduce()方法?

如何提前中断reduce()方法?
EN

Stack Overflow用户
提问于 2016-03-22 08:56:23
回答 11查看 81.3K关注 0票数 126

如何打破reduce()方法的迭代?

for

代码语言:javascript
运行
复制
for (var i = Things.length - 1; i >= 0; i--) {
  if(Things[i] <= 0){
    break;
  }
};

reduce()

代码语言:javascript
运行
复制
Things.reduce(function(memo, current){
  if(current <= 0){
    //break ???
    //return; <-- this will return undefined to memo, which is not what I want
  }
}, 0)
EN

回答 11

Stack Overflow用户

发布于 2017-06-23 18:55:16

不要使用reduce。只需使用常规迭代器(for等)对数组进行迭代,并在满足条件时中断。

票数 32
EN

Stack Overflow用户

发布于 2016-03-22 11:33:11

当然,没有办法让reduce的内置版本过早退出。

但是您可以编写自己的reduce版本,它使用一个特殊的令牌来确定何时应该中断循环。

代码语言:javascript
运行
复制
var EXIT_REDUCE = {};

function reduce(a, f, result) {
  for (let i = 0; i < a.length; i++) {
    let val = f(result, a[i], i, a);
    if (val === EXIT_REDUCE) break;
    result = val;
  }
  return result;
}

像这样使用它,对一个数组求和,但在达到99时退出:

代码语言:javascript
运行
复制
reduce([1, 2, 99, 3], (a, b) => b === 99 ? EXIT_REDUCE : a + b, 0);

> 3
票数 9
EN

Stack Overflow用户

发布于 2017-06-07 02:36:33

Array.every可以提供一种非常自然的机制来中断高阶迭代。

代码语言:javascript
运行
复制
const product = function(array) {
    let accumulator = 1;
    array.every( factor => {
        accumulator *= factor;
        return !!factor;
    });
    return accumulator;
}
console.log(product([2,2,2,0,2,2]));
// 0

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36144406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档