如何打破JavaScript中的嵌套循环?

我试过这个:

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

只有得到:

语法错误:缺less; 在陈述之前

你应该能够打破标签,就像这样:

 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中?

发帖之前请先search一下。 链接是我在页面左侧看到的第一个相关问题!

不幸的是,你必须设置一个标志或使用标签(认为旧学校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) }; 

编辑:标签错误地放置。

另见:

在我看来,把你的结构词汇保持在最低限度是很重要的。 如果我能rest一下,轻松地继续下去,我就这样做。

 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 ++。 但是,这比“肮脏”的rest还好。

编辑:长评// @丹尼斯…

我并不是百分之百地认为自己是“肮脏的”,但我仍然认为“打破”违背了我自己的清晰的代码的概念。 多层次rest的想法实际上让我感觉就像洗澡一样。

我觉得certificate我的意思是关于代码的感觉,因为我编写了所有的生活。 我能想到的最好的原因是礼貌和语法的结合。 打破只是不礼貌。 多级别的rest是简单的粗鲁。

当看一个for语句,读者确切地知道在哪里看。 你需要知道的关于交战规则的一切都在合同中,在括号之间。 作为一个读者,打破了我的侮辱,感觉就像我被骗了。

清晰比欺骗更为尊重。

包装在一个自我执行的function,并返回

 (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 “打破”你嵌套循环。

 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. 在内部循环中设置一个标志,如果标志被设置,则在循环之后再次中断。

你可以打破循环与单词“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'); } 

它logging以下内容:

 > 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 

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

打破第一个循环:

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