【问题标题】:What does `return` keyword mean inside `forEach` function? [duplicate]`forEach` 函数中的`return` 关键字是什么意思? [复制]
【发布时间】:2020-05-26 21:18:29
【问题描述】:

$('button').click(function () {
   [1, 2, 3, 4, 5].forEach(function (n) {
      if (n == 3) {
         // it should break out here and doesn't alert anything after
         return false
      }
      alert(n)      
   })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>

我的问题:为什么尽管我拨打return,它仍然会提示下一个号码?就像:忽略下面的代码并继续下一个元素

【问题讨论】:

  • $('button').click(function(){}) 呢?
  • 你可以使用if(n&gt;=3){ return false打破它
  • return 不会中断循环,break 会!
  • 有趣的是,如果您更改第 2 行并首先将数组分配给变量,例如:var r = [1, 2, 3, 4, 5]; r.forEach(function (n) {,则示例的行为会大不相同。在这种情况下,它将跳出循环。

标签: javascript arrays


【解决方案1】:

来自Mozilla Developer Network

除了抛出异常之外,没有其他方法可以停止或中断forEach() 循环。如果你需要这样的行为,forEach() 方法是错误的工具。

可以通过以下方式提前终止:

其他 Array 方法:every()some()find()findIndex() 使用返回真值的谓词测试数组元素,以确定是否需要进一步迭代。

【讨论】:

  • 使用forEach 并抛出错误来停止迭代是一种非常糟糕的做法,而且真的是矫枉过正。在您的情况下,您并不是真的想要迭代数组的 all (forEach...),但您想运行直到满足某个语句。你应该为它使用一个简单的循环(whileforfor indo while)。
  • 我同意@RonenCypis ...并建议您使用some()
  • 每个人都有一个计划,直到new Array(5) 出现......(new Array(5)).every(e =&gt; e === "maybe for loop + break wasn't such a bad idea after all?") 由于数组稀疏而产生了令人惊讶的结果。
  • 这似乎没有回答return 在实践中对forEach 循环所做的问题,但我想下一个答案会有所帮助。
【解决方案2】:

return 退出 current 函数,但迭代仍在继续,因此您将获得跳过 if 并提醒 4...

的“下一个”项目

如果你需要停止循环,你应该像这样使用一个普通的for循环:

$('button').click(function () {
   var arr = [1, 2, 3, 4, 5];
   for(var i = 0; i < arr.length; i++) {
     var n = arr[i]; 
     if (n == 3) {
         break;
      }
      alert(n);
   })
})

您可以在此处阅读有关 js break & continue 的更多信息:http://www.w3schools.com/js/js_break.asp

【讨论】:

  • 什么意思???我这样写是为了便于理解......代码可能会缩短一点,但它完全符合你的要求,不需要像这里的其他答案那样对数组进行额外的迭代:-)
  • 需要先声明数组。您想在数组长度内使用循环。你需要一个索引来访问数组元素.....这么多东西:)我的意思是
  • 您已经在示例中声明了数组,我只是添加了一个引用 (var arr) 以方便访问。您还可以将for 循环更改为for inwhile... 所有这些选项都比创建新函数要好得多,而且速度更快,并在此处的其他示例中抛出错误。性能明智,代码简洁......无论如何祝你好运:-)
  • 这个答案澄清了我关于在 forEach 循环内返回是否仍然有意义的确切问题,当您不希望执行循环逻辑的其余部分时,它绝对可以给定条件!
猜你喜欢
相关资源
最近更新 更多