跳出多层循环


1、throw new Error()
优点:可以中断循环执行;适用于各种形式(for循环,forEach循环等)
缺点:相当于强制抛错中断执行,不仅终止了循环,后续代码也不再执行

废话不多说,上例子,找出 【找出爱吃荔枝的人】 的人:

const arr = [
    {
        name: '小周',
        fruit: ['苹果', '香蕉']
    },
    {
        name: '小蓝',
        fruit: ['梨', '荔枝']
    },
    {
        name: '小红',
        fruit: ['樱桃', '西瓜']
    },
]

console.log("开始查找爱吃荔枝的人:")

let person;

for (let i = 0; i < arr.length; i++) {

    for (let j = 0; j < arr[i].fruit.length; j++) {

        console.log("已找到:",`${arr[i].name}爱吃${arr[i].fruit[j]}`)
    
        if (arr[i].fruit[j] === '荔枝') {
        
            person = arr[i].name
            
            // 在这里抛出异常
            throw new Error('程序终止')
        }
        
        
    }
}
console.log('仍然执行。爱吃荔枝的人是:', person)

2、return语句
优点:可以中断循环执行,对于函数很方便;
缺点:只能在函数使用,不能再foreach、map等回调函数中发生作用,会阻断后续运行。

代码略

3、为循环命名,跳出对应的循环
优点:多层循环时非常灵敏(想跳出哪一层,就跳出哪一层);循环体后面的代码仍然执行
缺点:必须是for循环!

const arr = [
    {
        name: '小周',
        fruit: ['苹果', '香蕉']
    },
    {
        name: '小蓝',
        fruit: ['梨', '荔枝']
    },
    {
        name: '小红',
        fruit: ['樱桃', '西瓜']
    },
]

console.log("开始查找爱吃荔枝的人:")

let person;

outside:for (let i = 0; i < arr.length; i++) {

    inside:for (let j = 0; j < arr[i].fruit.length; j++) {

        console.log("已找到:",`${arr[i].name}爱吃${arr[i].fruit[j]}`)
    
        if (arr[i].fruit[j] === '荔枝') {
        
            person = arr[i].name
            
            //跳出循环
            break outside;
        }
        
        
    }
}
console.log('仍然执行。爱吃荔枝的人是:', person)

文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论
  目录