如何打破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
不需要参数。 有两种解决方法:
-
把它们包装在一个函数中,然后调用
return
-
在内部循环中设置一个标志,如果标志被设置,则在循环之后再次中断。
你可以打破循环与单词“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; }