Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中打破嵌套循环?_Javascript_Nested Loops_Break - Fatal编程技术网

如何在JavaScript中打破嵌套循环?

如何在JavaScript中打破嵌套循环?,javascript,nested-loops,break,Javascript,Nested Loops,Break,我试过这个: for(i = 0; i < 5; i++){ for(j = i + 1; j < 5; j++){ break(2); } alert(1); } (i=0;i

我试过这个:

for(i = 0; i < 5; i++){
    for(j = i + 1; j < 5; j++){
        break(2);
    }
    alert(1);
}
(i=0;i<5;i++)的
{
对于(j=i+1;j<5;j++){
断裂(2);
}
警报(1);
}
只为了得到:

语法错误
:缺少
before语句


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

break
不接受参数。有两种解决办法:

  • 将它们包装在函数中并调用
    return

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


  • 您应该能够断开标签,如下所示:

    function foo () {
        dance:
        for (var k = 0; k < 4; k++) {
            for (var m = 0; m < 4; m++) {
                if (m == 2) {
                    break dance;
                }
            }
        }
    }
    
    函数foo(){
    舞蹈:
    对于(var k=0;k<4;k++){
    对于(var m=0;m<4;m++){
    如果(m==2){
    霹雳舞;
    }
    }
    }
    }
    
    不幸的是,您必须设置标志或使用标签(想想老派的goto语句)

    var breakout=false;
    对于(i=0;i断开第一个循环:

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

    for(i=0;i您需要命名外部循环并中断该循环,而不是内部循环-如下所示

    outer_loop: 
    for(i=0;i<5;i++) {
        for(j=i+1;j<5;j++) {
            break outer_loop;
        }
        alert(1);
    }
    
    外环:
    对于(i=0;i参见Aaron's,否则:
    
    j=5;i=5
    而不是
    break

    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
                }
            }
        }
    
    从复制的代码

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

    function myFunction(){
    
    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;
    }
    
    对于(变量i=0;i
    将函数用于多级循环-这是一个好方法:

    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;
    }
    
    函数foo()
    {
    var=false;
    对于(var k=0;(k<4&&!已找到);k++){
    对于(var m=0;(m<4&&!找到);m++){
    如果(m==2){
    发现=真;
    }
    }
    }
    发现退货;
    }
    
    请注意,在循环之后,m和k可能比您想象的要大。这是因为m++和k++是在循环条件之前执行的。但是,这仍然比“脏”中断要好

    编辑:长评论@Dennis

    我并不是百分之百地认真对待“肮脏”,但我仍然认为“休息”违背了我自己对清洁代码的概念。多层次休息的想法实际上让我感觉像在洗澡

    我发现我对代码的感觉是有道理的,因为我一生都在编写代码。我能想到的最好的原因是礼貌和语法的结合。打断并不礼貌。多级打断只是简单的粗鲁

    当阅读for语句时,读者确切地知道应该去哪里看。你需要知道的关于约定规则的所有内容都在合同中,在括号之间。作为一名读者,我觉得我被欺骗了


    清晰比欺骗更值得尊重。

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

    (function(){
        for(i=0;i<5;i++){
            for (j=0;j<3;j++){
                //console.log(i+' '+j);
                if (j == 2) return;
            }
        }
    })()
    
    (函数(){
    
    对于(i=0;iYou
    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();
    
    函数foo()
    {
    //舞蹈:
    对于(var k=0;k<4;k++){
    对于(var m=0;m<4;m++){
    如果(m==2){
    //霹雳舞;
    返回;
    }
    }
    }
    }
    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');
    }
    
    return;语句在这种情况下不起作用。

    另一个技巧是将父循环设置为到达末端,然后断开当前循环

    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);
            }
        }
    }
    
    函数foo()
    {
    对于(var k=0;k<4;k++){
    对于(var m=0;m<4;m++){
    如果(m==2){
    k=5;//设置此值,然后断开
    打破
    }
    控制台日志(m);
    }
    }
    }
    
    至少有五种不同的方法可以打破两个或多个循环:

    1)将父循环设置到末尾

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (j === 2)
            {
                i = 5;
                break;
            }
        }
    }
    
    (i=0;i<5;i++)的
    
    {
    对于(j=0;j<5;j++)
    {
    如果(j==2)
    {
    i=5;
    打破
    }
    }
    }
    
    2)使用标签

    fast:
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (j === 2)
                break fast;
        }
    }
    
    fast:
    对于(i=0;i<5;i++)
    {
    对于(j=0;j<5;j++)
    {
    如果(j==2)
    快攻;
    }
    }
    
    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;
    }
    
    var exit_loops=false;
    对于(i=0;i<5;i++)
    {
    对于(j=0;j<5;j++)
    {
    如果(j==2)
    {
    退出循环=真;
    打破
    }
    }
    if(退出_循环)
    打破
    }
    
    4)使用自动执行功能

    (function()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    })();
    
    function nested_loops()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    }
    nested_loops();
    
    (函数()
    {
    对于(i=0;i<5;i++)
    {
    对于(j=0;j<5;j++)
    {
    如果(j==2)
    返回;
    }
    }
    })();
    
    5)使用常规功能

    (function()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    })();
    
    function nested_loops()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    }
    nested_loops();
    
    函数嵌套的_循环()
    {
    对于(i=0;i<5;i++)
    {
    对于(j=0;j<5;j++)
    {
    如果(j==2)
    返回;
    }
    }
    }
    嵌套的_循环();
    
    实际上,它确实需要参数。:)亚伦:我刚刚在IE6中测试过;它需要:)break(2);:o你说2是什么意思,break不能有任何参数第7行在
    警报(1)之后缺少分号
    @Nathan Taylor:分号在JavaScript中是可选的,但被认为是良好的样式,几乎与@RakeshJuyal在其他语言(如CWow)中的样式相同,我不知道我们可以命名循环,非常好的信息+1@o.k.w:你没有命名循环。你只是在源代码中标记一个位置。我不知道JavaScript支持的标签。我想知道为什么我从来没有见过以前的那个O@xtofl:不完全正确。通过将标签放在语句的前面,将其与语句(可能是循环)关联起来。它仅对block语句有用,因为
    (function()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    })();
    
    function nested_loops()
    {
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 5; j++)
            {
                 if (j === 2)
                     return;
            }
        }
    }
    nested_loops();