label的机制-如何跳出双重循环

项目中有时要进行多重循环遍历,考虑到性能的问题,如何及时终止循环,是一个值得考虑的问题,通常的做法是我们声明一个变量,作为循环终止的标识,代码如下:

    var arrObj = [
                    [0,1,2],
                    [3,4,5],
                    [6,7,8],
                    [9,10,11],
                 ];
    for(var i=0;i<arrObj.length;i++){
        var currentArr=arrObj[i];
        console.log("当前的数组index----",i);
          for(var j=0;j<currentArr.length;j++){
            console.log("当前的数组值:",currentArr[j]);
                  if(currentArr[j]==6){
                    console.log(currentArr[j]);
                    break;
                  }
          }
    }

打开页面效果如下:

  • 可以看到,break只是跳出了内层循环,外层循环依然在进行,假如我们想要内层循环终止的时候,外层循环也终止呢?这可能需要自己来写逻辑,进行终止循环的操作,代码如下:
var arrObj = [
                [0,1,2],
                [3,4,5],
                [6,7,8],
                [9,10,11],
             ];
    //是否终止,默认不终止
    var isBreak=true;
    for(var i=0;i<arrObj.length;i++){
        var currentArr=arrObj[i];
        console.log("当前的数组index----",i);
        if(isBreak){
            for(var j=0;j<currentArr.length;j++){
                console.log("当前的数组值:",currentArr[j]);
                if(currentArr[j]==6){
                    console.log(currentArr[j]);
                    //终止循环
                    isBreak=false;
                    break;
                }
            }
        }
    }

打开页面效果如下:


  • 可以看到,我们自己编写逻辑也能让循环及时终止。但是我们看到控制台打印了index-----3,这说明外层循环的代码还是执行了一次。为了简单起见,思考一下,js语言本身是否给我们提供了某些语法,可以达到我们想要的效果,实际上,js语言提供了语法,只是我们不经常使用而已,偶然看文档发现的惊喜,今天和大家分享一下,那就是js的标记语法label,而不是你想象中的<label>标签。我们先看一下MDN对于label语法的说明及使用方法:
  • 我们来测试一下:
var arrObj = [
                [0,1,2],
                [3,4,5],
                [6,7,8],
                [9,10,11],
             ];
    //外层标记
    loop1:
    for(var i=0;i<arrObj.length;i++){
        var currentArr=arrObj[i];
        console.log("当前的数组index----",i);
        //内层标记
        loop2:
            for(var j=0;j<currentArr.length;j++){
                console.log("当前的数组值:",currentArr[j]);
                if(currentArr[j]==4){
                    console.log(currentArr[j]);
                    //终止循环
                    break loop1;
                }
            }

    }

页面效果如下:

可以看到,通过这种js自带的语法,可以轻松实现跳出某一代码快的操作,执行的逻辑,也不会像我们自己写的那样,会多执行一步。了解了js的这个语法特性,在性能方面,会有极大的提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章