通过 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

Shell编程-控制结构 | 基础篇

python中的for循环对象和循环退出

bash脚本

hell脚本编写 之 条件选择,条件判断,循环语句

R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break)