多重嵌套循环的实现

项目上有时候我们会用到多重嵌套,但是嵌套次数是不确定的,可能是两次嵌套就可以实现,也可能是更多,这种情况下我们可以用以下方法实现n次嵌套循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var n=3;//嵌套次数
var max=5;//每个循环的循环次数
var arr= new Array(n).fill(0);
while(arr[0]<=max){
console.log(arr);//循环体
arr[n-1]++;
for(var i=n-1;i>0;i--){
if(arr[i]>max){
arr[i-1]++;
arr[i]=0;
}else{
break;
}
}
}

相当于:

1
2
3
4
5
6
7
for(let i=0;i<=5;i++){
for(let j=0;j<=5;j++){
for(let k=0;k<=5;k++){
console.log([i,j,k]);
}
}
}

当然,我们也可以给每个循环体设置单独的max值。比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var n=3;//嵌套次数
var max=[3,2,4];//每个循环的循环次数(长度为n的数组)
var arr= new Array(n).fill(0);
while(arr[0]<=max[0]){
console.log(arr);//循环体
arr[n-1]++;
for(var i=n-1;i>0;i--){
if(arr[i]>max[i]){
arr[i-1]++;
arr[i]=0;
}else{
break;
}
}
}

相当于

1
2
3
4
5
6
7
for(let i=0;i<=3;i++){
for(let j=0;j<=2;j++){
for(let k=0;k<=4;k++){
console.log([i,j,k]);
}
}
}