【问题标题】:Preferred way to break a forEach method in JavaScript [duplicate]在JavaScript中打破forEach方法的首选方法[重复]
【发布时间】:2015-06-01 21:58:18
【问题描述】:

我只是在 JavaScript 中使用 forEach 方法来汇总数组中的所有元素。突然觉得有必要在某些条件下跳出循环,例如限制要计算的总和。 我想出了以下解决方案。如果我错了,请指出我。

对此进行小修改

function foreach(a) {
 var sum = 0;
 var breakException = {error:"stop it"};
 try {
    a.forEach(function (v) {
        sum += v;
        console.log(sum);
        if(sum>5) throw breakException.error;
    });
    return sum;
}
catch(e) {
    if(e!=breakException){
        throw e;
    }
}
}

【问题讨论】:

  • try-catch 的意义何在?
  • 刚刚做了一个小编辑....不是一个好的举动...但是工作..kindof

标签: javascript arrays


【解决方案1】:

您无法摆脱forEach。只需使用普通循环

for(var i = 0; i < a; i++){
   sum += a[i];
   if(sum > 5) break;
}

【讨论】:

  • 我知道我可以使用 for 循环。那只是为了证明如果我们能从 forEach 中走出来。
  • 顺便说一句,你可以通过throwing 打破forEach 循环:-)
  • @Bergi 这就像越狱:)
【解决方案2】:

forEach 不应该中断。如果您想打破类似forEach 的循环,请尝试everysome,它们可以让您跳出循环。

重写代码的一种可能方法是

var sum = 0;

yourArray.some(function (item) {
    if (sum > 5) {
        return true;
    }
    sum += item;
});

【讨论】:

  • @AmitJoki 你可以像使用.forEach() 一样使用.some(),除非你必须不断返回false 才能继续。一旦回调返回true,迭代就会停止。返回值可以忽略。 (我想如果你不 explicitly 返回 false 并让返回值为 undefined,那也可以。)
  • @Pointy 明白了。这就是我删除第一条评论的原因。
  • 我知道还有其他选择......但是如果我们在一个数组中获取大量记录并假设有一个 forEach 循环,那么打破它的新方法是什么某点
  • @optimus,你似乎没有抓住重点。如果您想跳出循环,您将需要使用此处答案中给出的替代方法。
【解决方案3】:

您当前的代码似乎有点傻。

您的 try/catch 块是无用的,因为您永远不会抛出错误让 catch 块捕获,然后重新抛出 (?) 并且您不需要 alert("break"); 来停止脚本。

无论如何,您都无法跳出forEach 循环,我认为您只想使用普通的 for 循环:

function sum(list){
  var sum = 0;
  for (var i = 0, len = list.length; i < len; i++){
    sum += list[i];
    if (sum > 5){
      break;
    }
  }
  return sum;
}

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2020-08-01
    • 1970-01-01
    • 2018-04-20
    • 2011-08-06
    相关资源
    最近更新 更多