Mas*_*ask 189 javascript break nested-loops
我试过这个:
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
break(2);
}
alert(1);
}
Run Code Online (Sandbox Code Playgroud)
只得到:
SyntaxError:;在陈述之前遗漏
那么,我如何打破JavaScript中的嵌套循环?
Noo*_*ilk 530
您应该能够打破标签,如下所示:
function foo ()
{
dance:
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
break dance;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fen*_*ton 40
您需要命名外部循环并打破该循环,而不是内部循环 - 就像这样.
outer_loop:
for(i=0;i<5;i++) {
for(j=i+1;j<5;j++) {
break outer_loop;
}
alert(1);
}
Run Code Online (Sandbox Code Playgroud)
Gle*_*enn 27
见亚伦的.否则:
j=5;i=5而不是break.
Jim*_*Jim 20
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
从Javascript中嵌套循环的最佳破解方式复制的代码?
请在发布问题前进行搜索.该链接是我在本页左侧看到的第一个相关问题!
Dan*_*ray 17
至少有五种不同的方法可以打破两个或更多循环:
1)将父循环设置为结尾
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)使用标签
fast:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break fast;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
4)使用自执行功能
(function()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
})();
Run Code Online (Sandbox Code Playgroud)
5)使用常规功能
function nested_loops()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
}
nested_loops();
Run Code Online (Sandbox Code Playgroud)
Jon*_*and 11
不幸的是,你必须设置一个标志或使用标签(想想老派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)
};
Run Code Online (Sandbox Code Playgroud)
标签方法如下:
end_loops:
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
break end_loops;
}
alert(1)
};
Run Code Online (Sandbox Code Playgroud)
编辑:标签放置错误.
另见:
在我看来,将构造词汇量保持在最低限度非常重要.如果我可以放弃休息并继续轻松,我会这样做.
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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在循环之后,m和k是您可能想到的更大的一个.这是因为m ++和k ++在它们的循环条件之前执行.然而,它仍然比"肮脏"休息更好.
编辑:长评@Dennis ......
我并不是100%认真对待'肮脏',但我仍然认为'休息'违反了我自己的干净代码概念.多层次休息的想法实际上让我感觉像是在洗澡.
我发现我对代码的感觉是正确的,因为我已经编码了所有生命.我能想到的最好的原因是礼仪和语法的结合.休息只是不礼貌.多级休息很简单.
在查看for语句时,读者确切地知道要查找的位置.您需要了解的有关参与规则的所有内容都在合同中,在括号之间.作为读者,打破侮辱我,感觉就像我被骗了.
清晰度比作弊更加尊重.
使用函数进行多级循环 - 这是好方法:
function find_dup () {
for (;;) {
for(;;) {
if (done) return;
}
}
}
Run Code Online (Sandbox Code Playgroud)