有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断

Is there a way to put a label AFTER all nested loops to break them all in one step?

本文关键字:一步 全部 标签 方法 一种 嵌套循环 有没有 之后 一个      更新时间:2023-09-26

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

 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)

然后我在这里找到了一个答案,建议使用标签来避免更多的中断和像这样的布尔值

 //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个循环之后?

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

有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断

通过使用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不支持它。