通过 if 条件时退出 foreach
Posted
技术标签:
【中文标题】通过 if 条件时退出 foreach【英文标题】:Exit of foreach when pass by a if conditional 【发布时间】:2016-09-03 09:20:30 【问题描述】:我的代码有逻辑问题。
object.forEach(function(item)
if (item.a === $scope.a)
//doSomething
else
//doOtherStuff
);
所以,基本上,我想运行对象并比较 $scope 是否存在于对象中。如果 $scope 存在,做一些事情并在 forEach 上退出,否则,做其他事情并退出。最好的方法是什么?
我的逻辑问题是它在 forEach 内部运行,并且对于每个索引,都在做某事。也许我必须使用另一种我还不知道的方法,你能帮帮我吗?
【问题讨论】:
这个答案可能对你有帮助:***.com/questions/13843972/angular-js-break-foreach 我希望你用名称object
声明的实际上是一个数组。
在这两种情况下都想退出有点奇怪(条件为真或假),这实际上意味着您永远不会真正迭代,而只想对第一项采取行动。那么问题来了:你为什么要使用forEach
,而不是只挑第一个元素并在上面做你的逻辑?
@trincot 不只是针对第一个元素,我想在对象内部进行迭代以比较 $scope.a 是否存在于项目中,如果存在,我想做一些事情并退出。跨度>
好的,只是在你的问题中你写了else,做其他事情也退出。这意味着你总是退出......我想这不是你真正在做的事情。
【参考方案1】:
改用every
:
Object.keys(object).every(function(item)
if (some_exit_condition)
return false; // don't call this callback again for next items
else
// don't stop, keep going
return true;
);
如果object
是类似数组的对象(可迭代),则无需在其上调用Object.keys()
。这取决于您要迭代的内容。使用Object.keys()
,您可以迭代该对象的所有属性,并在回调函数中编写object[item]
以获取该属性的值。
some
方法具有类似的行为,但您必须返回 true
以停止迭代,并返回 false
以继续。
every()
和some()
都有一个布尔返回值,这也将它们与forEach()
区分开来。使用该返回值,您可以知道是否有明确的“退出”。
【讨论】:
是的,every
适用于算法的特定行为,这个问题解决了一半,谢谢!【参考方案2】:
也许你可以使用 array.prototype.filter() 来简化你的代码。
您可以查看更多信息here。
你兼容ie9,但我认为应该有一个jquery函数可以做到这一点。
【讨论】:
以上是关于通过 if 条件时退出 foreach的主要内容,如果未能解决你的问题,请参考以下文章
复习 if条件 for序列 for字典 循环退出 while
R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break)