我试过这个:

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

请参阅Aaron的。除此以外: 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 ...

我不是100%的认真态度是“脏”,但我仍然认为,“破发”违反我自己的干净的代码的概念。具有多层次的休息的想法居然让我感觉像洗澡。

我发现证明了我的意思约约的代码,因为我已经编写了所有的生活的感觉。为什么我能想到的是最好的方式是和语法的组合。休息就是不能客气。多电平中断只是普通粗鲁。

当在for语句看,读者确切地知道去哪里找。你需要了解交战规则一切都在合同中,在括号之间。作为一个读者,休息侮辱我,那感觉就像我一直在欺骗。

清晰度是比欺骗更尊重。

包裹在自执行的函数,并返回

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

对于多级循环利用的功能 - 这是很好的方式:

function find_dup () {
    for (;;) {
        for(;;) {
            if (done) 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 不带参数。有两种解决方法:

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

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

您可以打破嵌套与,它的作品没有任何标签的单词“破发”的循环。

在你的情况,你需要有一个条件,这足以打破循环。

下面是一个例子:

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

将第一循环:

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top