10

这是一个理论问题,用于了解有多少转义(返回或退出)可以应用于嵌套循环或其他控件和函数。

我对此感到困惑,因为我被困在代码中 如何同时摆脱 for ... 每个循环和方法?

我不能停止迭代元素中option的 s 。select

我已经尝试过returnreturn false但没有成功。

一般来说,我们怎么能做到这一点?

function() {
    for (...) {
        if (...) {
            $(...).each(function() {
               // You have to exit outer function from here
            });
        }
    }
}
4

5 回答 5

9

在循环之间使用共享变量。如果要退出,则将其翻转到循环true结束时,并在检查结束时将其翻转为. 如果是的话,打破它。each()for-looptrue

于 2013-03-25T12:53:30.790 回答
4

我会这样做:

  • 创建一个布尔变量来检查每个循环,如果变量为真,则退出循环(对每个循环执行此操作)。

    var exitLoop = false;
    
     $(sentences).each(function() {
        if(exitLoop) {return;}
        var s = this;
        alert(s);
        $(words).each(function(i) {
        if(exitLoop) {return;}
            if (s.indexOf(this) > -1)
            {
                alert('found ' + this);
                throw "Exit Error";
            }
        });
    });
    

请注意,这不是正确使用 atry-catch作为 atry-catch应该严格用于错误处理,而不是跳转到代码的不同部分 - 但它适用于您正在做的事情。

如果return不是为您执行此操作,请尝试使用try-catch

try{
$(sentences).each(function() {
    var s = this;
    alert(s);
    $(words).each(function(i) {
        if (s.indexOf(this) > -1)
        {
            alert('found ' + this);
            throw "Exit Error";
        }
    });
});
}
catch (e)
{
    alert(e)
}

取自此答案的代码

于 2013-03-25T12:52:31.840 回答
1

也可以通过更改迭代器值来退出循环。

var arr = [1,2,3,4,5,6,7,8,9,10];

for(var i = 0;i<arr.length;i++){

  console.log(i);
  compute(i);

  function compute(num){
    //break is illegal here
    //return ends only compute function
    if(num>=3) i=arr.length;
  }

}
于 2017-11-10T12:29:38.997 回答
0

“标签”是范围过程(如中断循环)的解决方案。这是我多年后意识到的内置答案:https ://css-tricks.com/you-can-label-a-javascript-if-statement/

于 2021-05-21T05:09:21.013 回答
-1

与大多数语言一样。退出循环的关键字是break; 更多信息:http: //www.w3schools.com/js/js_break.asp

于 2013-03-25T12:51:27.597 回答