【问题标题】:How to exit (escape) a function from for loop inside of it?如何从其中的 for 循环中退出(转义)函数?
【发布时间】:2013-03-25 12:47:00
【问题描述】:

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

我对此感到困惑,因为我被困在代码中 How to escape from for ... each loop and method at the same time?

我无法停止在 select 元素中迭代 options。

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

一般我们怎么做?

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

【问题讨论】:

  • 您使用什么语言? php?
  • 从他帖子中的链接来看,我会说 jquery
  • 对不起@Evan javascript。
  • 我认为你可以使用 return false
  • @PSR 我用过return false,@nalply 是的,我用过each()

标签: javascript for-loop foreach


【解决方案1】:

在循环之间使用共享变量。如果要退出,请在each() 循环的末尾将其翻转到true,并在for-loop 的末尾检查它是否为true。如果是,请打破它。

【讨论】:

  • 是的@Konstantin D 这将解决我的问题。但是我们应该说没有直接的解决方案吗?
  • @caglaror 我会说是的。
【解决方案2】:

我会这样做:

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

    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";
            }
        });
    });
    

注意不是正确使用 try-catch 作为 try-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)
}

代码取自this answer

【讨论】:

  • 这段代码运行良好,没有理由反对。需要解释一下吗?
  • try catch 应该用于错误处理,而不是跳转到脚本的不同部分。
  • @nalply 我编辑了,说实话不知道你在找什么
【解决方案3】:

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

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;
  }

}

【讨论】:

  • 但是嵌套循环?内部循环将继续迭代。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 只是想知道否决的选民?我的回答有什么不正确的地方?
    • 我不知道你是否意识到,但for each() 不是javascript 代码。至少我不知道
    • 我以前说过。并非 wc3schools.com 上的所有内容都是错误的。如果我发布的链接包含正确信息,请关闭它。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2022-01-26
    • 1970-01-01
    • 2019-10-21
    • 2020-02-20
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多