有没有办法在所有嵌套循环之后放置一个标签,以便一步完成它们?

时间:2016-05-09 11:53:27

标签: javascript

我试图找到一种比这种方式更好地打破嵌套循环的方法

 var found = false;
  for(x=0; x<10; x++){
    for(i=0; i<10; i++){
        if(i===3){found =true; break;}; //break inner loop
    };//end of inner loop (i)
   if(found){break;}; // break outer loop
  };//end of outer loop for(x)

然后我找到答案here建议使用标签来避免更多的中断和像这样的布尔

 //var found = false; // - using labels we saved this Boolean 
  exitlabel:
  for(x=0; x<10; x++){
    for(i=0; i<10; i++){
        if(i===3){break exitlabel;}; //jump to the label
    };//end of inner loop (i)
   //if(found){break;}; // - using labels we SAVED this if statement
  };//end of outer loop for(x)

但问题是我不能在<2>循环之后标签退出它们。当我这样做时,浏览器告诉我它无法找到标签! 像这样:

  for(x=0; x<10; x++){
    for(i=0; i<10; i++){
        if(i===3){break exitlabel;};
    };
  };
  exitlabel:  // ERROR

并且在循环之前对齐标签将使循环从头开始再次执行,除非我在标签之后和循环之前使用if语句和布尔值来绕过2个循环,使用类似这样的东西

 var found = false;
 exitlabel:
 if(!found){
     for(x=0; x<10; x++){
       for(i=0; i<10; i++){
           if(i===3){found =true; break exitlabel;};
       };//end of inner loop (i)
     };//end of outer loop for(x)
 };// end of if statement

是否是一种保存布尔值的方法,并避免将我的循环包装在这样的IF语句中,只是将标签放在像C语言这样的2循环之后?

如果这是一个愚蠢的问题,请考虑我是非常新手,谢谢。

1 个答案:

答案 0 :(得分:2)

  

有没有办法在所有嵌套循环之后放置一个标签,以便一步完成它们?

通过使用break语句,您可以打破外部循环。它不需要追求。这使得它在您使用break exitlable时立即停止。

一个简单的测试就证明了这一点。

exitlabel:
  for (x = 0; x < 10; x++) {
    for (i = 0; i < 10; i++) {
      document.querySelector("pre").textContent += " " + i
      if (i === 3) {
        break exitlabel;
      }
    }
  }

  document.querySelector("pre").textContent += " after loop";
<pre></pre>

  

并在循环之前对齐标签将使循环从头开始执行

那不是真的。通过使用break并引用附加到外部for语句的标签,您告诉循环停止。它并没有告诉它从一开始就重新启动。

您所描述的内容听起来更像goto,JavaScript不支持。