项目中有时要进行多重循环遍历,考虑到性能的问题,如何及时终止循环,是一个值得考虑的问题,通常的做法是我们声明一个变量,作为循环终止的标识,代码如下:
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
- 可以看到,
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
语法的说明及使用方法:
MDN使用说明
- 我们来测试一下:
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;
}
}
}
页面效果如下:
label语法
可以看到,通过这种js自带的语法,可以轻松实现跳出某一代码快的操作,执行的逻辑,也不会像我们自己写的那样,会多执行一步。了解了js的这个语法特性,在性能方面,会有极大的提升。