2013-12-22 88 views
3

我有两个for循环要退出两个环路我的控制是在内环看到下面的代码从嵌套突围的for循环

for(condition) 
{ 
    for (condition) 
    { 
     if(condition) 
        from here i want to exit from these loops 
    } 
} 
+1

以下大部分答案都是合理的。但我也建议,如果你开始建立深度嵌套的控制结构,你可能想重新考虑你的设计。这可能是好的,但更深的是踩在不舒服的地面上。 –

回答

1

有一个标志,如果该标志瀑布打破了他们两人。

var flag = true; 

for(condition && flag) 
{ 
    for (condition && flag) 
    { 
     if(condition) { 
      flag = false; 
      break; 
     } 
    } 
} 
+0

Thx其工作正常 –

+0

@DasariVinodh欢迎您:)检查[这个答案](http://stackoverflow.com/a/20725904/1903116),这应该是要走的路。 – thefourtheye

+0

@DasariVinodh:在某些情况下,这样做会失败。如果第一个循环内有任何代码,并且在嵌套循环之后,它将在设置标志后最后一次运行。改用“break”语句。 –

8

JS使用语句标签来给出语句标识符。这对嵌套循环很有用,因为它可以让你的内部语句控制超出循环“层”的内容。语句标签可以与continue或break语句一起使用。

所以,你的代码可以是:

someName: 
for(condition) 
{ 
    for (condition) 
    { 
     if(condition) 
        if (condition) { 
         break someName; // exit outer loop 
        } 
    } 
} 

欲了解更多信息,请参阅MDN "label"

+0

很奇怪。我不知道这是一件事。 –

1

写您的嵌套循环到一个单独的功能然后用return从任何地方走出循环,而不是break

function myFunction() 
{ 
    for(condition) 
    { 
     for (condition) 
     { 
      if(condition) 

         if (condition) 
         { 
         return; 
         } 
     } 
    } 
} 
+0

Herrington Darkholme的回答比较好,请检查一下:) – thefourtheye

+1

@thefourtheye:Ramshad的回答可能比Herrington的回答更好(因为函数将被使用),因为它至少将代码分成更小的部分并替代描述名称。反正有人可能想要的东西。 –

2

虽然jpau的食谱是很好,让人联想到C/C++的,我会选择一个配方与curry's味道。

只需将您的循环包装在IIFE中即可。

(function(){ 
    for(condition) { 
    for (condition) { 
     if(condition) { 
     // do whatever here 
     return; 
     } 
    } 
    } 
})() 

因为function是在JavaScript一流的对象,你可以不诉诸lalels利用IIFE的。

+0

什么是“诉诸标签”?国际海事组织,这是一个更清洁,更可读的语法比使用这样的IIFE。 –

+0

标签虽然合法,但在JavaScript中不是一个好选择。 Javascript支持代码块{{foo:bar()}'和普通对象,例如'{foo:bar()}'。有规则可以区分它们,但是真的让用户难以记住JavaScript的坏部分吗? –

+0

这种语法问题无论如何都存在。它不会使标签成为不好的选择。在适当的地方不使用标签不能解决任何问题。 –