`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>=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...),但您想运行直到满足某个语句。你应该为它使用一个简单的循环(while
、for
、for in
、do while
)。
我同意@RonenCypis ...并建议您使用some()
每个人都有一个计划,直到new Array(5)
出现......(new Array(5)).every(e => 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 in
或while
... 所有这些选项都比创建新函数要好得多,而且速度更快,并在此处的其他示例中抛出错误。性能明智,代码简洁......无论如何祝你好运:-)
这个答案澄清了我关于在 forEach
循环内返回是否仍然有意义的确切问题,当您不希望执行循环逻辑的其余部分时,它绝对可以给定条件!以上是关于`forEach` 函数中的`return` 关键字是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!
Java8 Lambda 表达式中的 forEach 如何提前终止?
面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!