本站目前升级了全新主题zhime,该主题色彩更清新明亮。售价99元/套,你值得拥有,后台配置全,永久更新。另外还有Next.js版本!😃

js如何完全跳出多重循环

话说跳出循环如for for..in等,很多人想到的无非就是break、continue、return,而且return的跳出还必须借助函数这样的宿主环境才行,那么如果有多个for循环,我们该如何完全跳出呢?

接下来我们进行一些实验,这些实验都不是很复杂,也没有往深度的去解读,仅仅是一个普通的实验,如下:

code
let a = ['a','b','c'],
    b = [1,2,3],
    c = ['hello', 'world'];
for (let i = 0; i < a.length; i++) {
    console.log(a[i]);
    for (let j = 0; j < b.length; j++) {
        console.log(b[j]);
        for (let m = 0; m < c.length; m++) {
            console.log(c[m]);
        };
    };
};

执行后显示如下:
a
1
hello
world
2
hello
world
3
hello
world
b
1
hello
world
2
hello
world
3
hello
world
c
1
hello
world
2
hello
world
3
hello
world


这是一个正常的循环完整code,那么接下来进行相应的跳出实验。

首先我们尝试使用break,如下:

code
let a = ['a','b','c'],
    b = [1,2,3],
    c = ['hello', 'world'];
for (let i = 0; i < a.length; i++) {
    console.log(a[i]);
    for (let j = 0; j < b.length; j++) {
        if(j==1){
            break;
        }
        console.log(b[j]);
        for (let m = 0; m < c.length; m++) {
            console.log(c[m]);
        };
    };
};

显示如下:
a
1
hello
world
b
1
hello
world
c
1
hello
world

 

通过上面的代码我们大致得出一个结论,break跳出的是当前整个循环,包括循环内部的所有后续要执行的代码均不再执行,但是不影响外部大的循环。

接下来实验第二种continue

code
let a = ['a','b','c'],
    b = [1,2,3],
    c = ['hello', 'world'];
for (let i = 0; i < a.length; i++) {
    console.log(a[i]);
    for (let j = 0; j < b.length; j++) {
        if(j==1){
            continue;
        }
        console.log(b[j]);
        for (let m = 0; m < c.length; m++) {
            console.log(c[m]);
        };
    };
};

显示如下:
a
1
hello
world
3
hello
world
b
1
hello
world
3
hello
world
c
1
hello
world
3
hello
world

可以看出,continue是跳出当前循环,并开始下一次要执行的代码,所以它不会影响到下一个循环体内的循环。

对于return主要用于在函数内,这里就不举例了。

接下来思考一个问题,如何完全跳出多重循环。

这个问题我刚开始也很纠结,后来网上查了下资料,发现可以使用命名空间的方法,即可以给循环加名字,然后通过break加上循环名来跳转到某个循环或者直接跳处函数,如下:

code
let a = ['a','b','c'],
    b = [1,2,3],
    c = ['hello', 'world'];
firstName:
for (let i = 0; i < a.length; i++) {
    console.log(a[i]);
    twoName:
    for (let j = 0; j < b.length; j++) {
        if(j==1){
            continue;
        }
        console.log(b[j]);
        threeName:
        for (let m = 0; m < c.length; m++) {
            if(m==1){
                break twoName;
            }
            console.log(c[m]);
        };
    };
};

显示如下:
a
1
hello
b
1
hello
c
1
hello

通过上面的列子得出,这种命名空间的方法可以通过break加上空间名可以跳转到空间名所在作用域后继续执行该作用域的下一步代码。

写的很乱,不知道大家是否明白。

 

读完了点一下,作者能得积分

赞赏

如果这篇内容帮到了你,不妨请作者喝杯咖啡

分享 微博 QQ

发表评论

发表评论