`forEach` 函数中的`return` 关键字是啥意思? [复制]

Posted

技术标签:

【中文标题】`forEach` 函数中的`return` 关键字是啥意思? [复制]【英文标题】:What does `return` keyword mean inside `forEach` function? [duplicate]`forEach` 函数中的`return` 关键字是什么意思? [复制] 【发布时间】:2016-04-11 18:03:49 【问题描述】:

$('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) ,则示例的行为会大不相同。在这种情况下,它将跳出循环。 【参考方案1】:

来自Mozilla Developer Network:

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

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

一个简单的循环 一个for...of 循环 Array.prototype.every() Array.prototype.some() Array.prototype.find() Array.prototype.findIndex()

其他 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 循环内返回是否仍然有意义的确切问题,当您不希望执行循环逻辑的其余部分时,它绝对可以给定条件!

以上是关于`forEach` 函数中的`return` 关键字是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

由forEach中return无法终止函数执行引出的探究

面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!

Java8 Lambda 表达式中的 forEach 如何提前终止?

面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!

面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!

Js中数组的forEach()方法return无法退出循环