如何打破JavaScript中的嵌套循环?[重复]

2020/10/15 13:01 · javascript ·  · 0评论

我尝试了这个:

for(i = 0; i < 5; i++){
    for(j = i + 1; j < 5; j++){
        break(2);
    }
    alert(1);
}

只能得到:

SyntaxError;声明前缺失

那么,我该如何打破JavaScript中的嵌套循环?

您应该可以打断标签,如下所示:

function foo ()
{
    dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                break dance;
            }
        }
    }
}

您需要命名外循环并中断该循环,而不是内循环-这样。

outer_loop: 
for(i=0;i<5;i++) {
    for(j=i+1;j<5;j++) {
        break outer_loop;
    }
    alert(1);
}

见亚伦的。否则:
j=5;i=5代替break

loop1:
    for (var i in set1) {
loop2:
        for (var j in set2) {
loop3:
            for (var k in set3) {
                break loop2;  // breaks out of loop3 and loop2
            }
        }
    }

最佳方式复制的代码打破Javascript中的嵌套循环?

发表问题前请先搜索。链接是我在此页左侧看到的第一个相关问题!

至少有五种不同的方法可以打破两个或多个循环:

1)将父循环设置为结尾

for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
        {
            i = 5;
            break;
        }
    }
}

2)使用标签

fast:
for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
            break fast;
    }
}

3)使用变量

var exit_loops = false;
for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
        {
            exit_loops = true;
            break;
        }
    }
    if (exit_loops)
        break;
}

4)使用自我执行功能

(function()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
})();

5)使用常规功能

function nested_loops()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
}
nested_loops();

不幸的是,您必须设置一个标志或使用标签(想想旧式的goto语句)

var breakout = false;

for(i=0;i<5;i++)
{
    for(j=i+1;j<5;j++)
    {
        breakout = true;
        break;
    }
    if (breakout) break;
    alert(1)
};

标签方法如下所示:

end_loops:
for(i=0;i<5;i++)
{
    for(j=i+1;j<5;j++)
    {
        break end_loops;
    }
    alert(1)
};

编辑:标签放置不正确。

另请参阅:

我认为,将构造词汇量降到最低很重要。如果我可以消除休息并轻松继续,那么我会这样做。

function foo ()
{
    var found = false;
    for(var k = 0; (k < 4 && !found); k++){
        for(var m = 0; (m < 4 && !found); m++){
           if( m === 2){
               found = true;
           }
        }
    }
    return found;
}

请注意,循环之后,m和k可能会大一个。这是因为m ++和k ++在其循环条件之前执行。但是,它仍然比“肮脏”的中断更好。

编辑:长评论@Dennis ...

我并不是对“肮脏”感到百分百认真,但我仍然认为“中断”违反了我自己的“干净代码”概念。多层次休息的想法实际上让我感觉像在洗澡。

我发现证明我对代码感觉的意思是正确的,因为我已经编写了所有代码。我能想到的最好的方法是举止和语法的结合。休息并不礼貌。多级休息只是个粗鲁的行为。

在查看for语句时,读者确切地知道要看哪里。您需要了解的有关聘用规则的所有内容都在合同中的括号之间。作为一名读者,请侮辱我,感觉就像我被骗了一样。

清晰比欺骗更受人尊敬。

使用函数进行多级循环-这是一个好方法:

function find_dup () {
    for (;;) {
        for(;;) {
            if (done) return;
        }
    }
}

包装一个自执行函数并返回

(function(){
    for(i=0;i<5;i++){
        for (j=0;j<3;j++){
            //console.log(i+' '+j);
            if (j == 2) return;
        }
    }
})()

return要“打破”您的嵌套for循环。

function foo ()
{
    //dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                //break dance;
                return;
            }
        }
    }
}
foo();

您可以使用单词“ break”来中断嵌套循环,它可以不带任何标签而工作。

在您的情况下,您需要具备足以打破循环的条件。

这是一个例子:

var arr = [[1,3], [5,6], [9,10]];
for (var a = 0; a<arr.length; a++ ){
  for (var i=0; i<arr[a].length; i++) {
    console.log('I am a nested loop and i = ' + i);
    if (i==0) { break; }
  }
  console.log('first loop continues');
}

它记录以下内容:

> I am a nested loop and i = 0 
> first loop continues
> I am a nested loop and i = 0 
> first loop continues
> I am a nested loop and i = 0 
> first loop continues

回报; 语句在这种情况下不起作用。
工作笔

另一个技巧是将父循环设置为结束,然后中断当前循环

function foo()
{
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                k = 5; // Set this then break
                break;
            }
          console.log(m);
        }
    }
}

break不带参数。有两种解决方法:

  1. 将它们包装在函数中并调用 return

  2. 在内部循环中设置一个标志,如果设置了标志,则在循环后立即中断。

中断第一个循环:

for(i=0;i<5;i++)
{
  for(j=i+1;j<5;j++)
  {
    //do something

    break;
  }
  alert(1);
};

打破两个循环:

for(i=0;i<5;i++)
{
  var breakagain = false;
  for(j=i+1;j<5;j++)
  {
    //do something

    breakagain = true;
    break;
  }
  alert(1);
  if(breakagain)
    break;
};
function myFunction(){
  for(var i = 0;i < n;i++){
    for(var m = 0;m < n;m++){
      if(/*break condition*/){
        goto out;
      }
    }
  }
out:
 //your out of the loop;
}
本文地址:http://javascript.askforanswer.com/ruhedapojavascriptzhongdeqiantaoxunhuanzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!