如何打破嵌套循环在JavaScript?

我试了一下:

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

结果却得到:

SyntaxError:缺少; before语句

那么,如何在JavaScript中打破嵌套循环呢?

138577 次浏览

break不接受参数。有两种变通方法:

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

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

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

function foo () {
dance:
for (var k = 0; k < 4; k++) {
for (var m = 0; m < 4; m++) {
if (m == 2) {
break dance;
}
}
}
}

不幸的是,你必须设置一个标志或使用标签(想想老式的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)
};

编辑:标签放置错误。

还看到:

打破第一个循环:

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

你需要命名你的外部循环并打破这个循环,而不是像这样打破你的内部循环。

outer_loop:
for(i=0;i<5;i++) {
for(j=i+1;j<5;j++) {
break outer_loop;
}
alert(1);
}
< p >见亚伦的。否则: j=5;i=5代替break。< / p >
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中打破嵌套循环的最佳方法?复制的代码

请在发表问题前搜索。这个链接是我在本页左侧看到的第一个相关问题!

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

在多级循环中使用function -这是一个好方法:

function find_dup () {
for (;;) {
for(;;) {
if (done) return;
}
}
}

在我看来,将构造词汇量保持在最小是很重要的。如果我能轻易地放弃休息并继续下去,我就这么做。

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++在它们的循环条件之前执行。然而,这仍然比“肮脏的”休息要好。

编辑:长评论@丹尼斯…

我并不是百分百地认真对待“肮脏”,但我仍然认为“打破”违背了我自己对干净代码的概念。一想到多层次的休息,我就想冲个澡。

我发现我对代码的感觉是正确的,因为我写过所有的生命。我能想到的最好的原因是礼仪和语法的结合。休息是不礼貌的。多层休息是非常粗鲁的。

在查看for语句时,读者确切地知道在哪里查找。你需要知道的关于交战规则的一切都在合同里,在括号里。作为一个读者,休息侮辱了我,感觉我被欺骗了。

明说比欺骗更值得尊敬。

封装一个自执行函数并返回

(function(){
for(i=0;i<5;i++){
for (j=0;j<3;j++){
//console.log(i+' '+j);
if (j == 2) 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来打破嵌套的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
返回;语句在这种情况下不起作用。 工作的钢笔 < / p >

至少有五种不同的方法可以打破两个或多个循环:

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