我试过了:
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
break(2);
}
alert(1);
}
只得到:
之前遗漏
SyntaxError
:在声明;
那么,我如何打破JavaScript中的嵌套循环?
答案 0 :(得分:506)
您应该能够打破标签,如下所示:
function foo ()
{
dance:
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
break dance;
}
}
}
}
答案 1 :(得分:36)
您需要命名外部循环并打破该循环,而不是内部循环 - 就像这样。
outer_loop:
for(i=0;i<5;i++) {
for(j=i+1;j<5;j++) {
break outer_loop;
}
alert(1);
}
答案 2 :(得分:25)
见亚伦的。除此以外:
j=5;i=5
代替break
。
答案 3 :(得分:18)
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
}
}
}
从Best way to break from nested loops in Javascript?
复制的代码请在发布问题前进行搜索。该链接是我在本页左侧看到的第一个相关问题!
答案 4 :(得分:13)
至少有五种不同的方法可以打破两个或多个循环:
1)将父循环设置为结束
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
2)使用标签
exit_loops:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break exit_loops;
}
}
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();
答案 5 :(得分: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)
};
标签方法如下:
end_loops:
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
break end_loops;
}
alert(1)
};
编辑:标签放置不正确。
另见:
答案 6 :(得分:6)
在我看来,将构造词汇量保持在最低限度非常重要。如果我可以放弃休息并继续轻松,我会这样做。
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语句时,读者确切地知道要查找的位置。您需要了解的有关参与规则的所有内容都在合同中,在括号之间。作为一个读者,打破侮辱我,感觉就像我被骗了。
清晰度比作弊更加尊重。
答案 7 :(得分:5)
包装自执行功能并返回
(function(){
for(i=0;i<5;i++){
for (j=0;j<3;j++){
//console.log(i+' '+j);
if (j == 2) return;
}
}
})()
答案 8 :(得分:4)
使用多级循环函数 - 这是好方法:
function find_dup () {
for (;;) {
for(;;) {
if (done) return;
}
}
}
答案 9 :(得分:2)
你return
到&#34;打破&#34;你嵌套了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();
答案 10 :(得分:0)
break
不接受参数。有两种解决方法:
将它们包裹在一个函数中并调用return
如果设置了标志,则在内循环中设置一个标志,然后在循环后再次中断。
答案 11 :(得分:0)
您可以使用“break”一词打破嵌套for循环,它可以不使用任何标签。
在你的情况下,你需要有一个足以打破循环的条件。
以下是一个例子:
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
return; 语句在这种情况下不起作用。 Working pen
答案 12 :(得分:0)
另一个技巧是通过设置父循环到达结束然后打破当前循环
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);
}
}
}
答案 13 :(得分:-1)
打破第一圈:
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;
};
答案 14 :(得分:-8)
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;
}