看了一些文章,大略是以下2个办法:

1、throw new Error()

长处:能够中断循环执行;实用于各种模式(for循环,forEach循环等)
毛病:相当于强制抛错中断执行,不仅终止了循环,后续代码也不再执行

废话不多说,上例子,找出 【第一个爱吃芒果】 的人:

const arr = [    {        name: '张三',        fruit: ['苹果', '香蕉']    },    {        name: '李四',        fruit: ['梨', '芒果']    },    {        name: '王五',        fruit: ['樱桃', '西瓜']    },    {        name: '小红',        fruit: ['菠萝', '芒果']    },]let person = undefinedfor (let i = 0; i < arr.length; i++) {    for (let j = 0; j < arr[i].fruit.length; j++) {            if (arr[i].fruit[j] === '芒果') {                    console.log(arr[i].name, arr[i].fruit[j])                        person = arr[i].name                        // 在这里抛出异样            throw new Error('中断')        }    }}console.log('这里依然能够执行', person)


看打印的后果:在找到第一个芒果之后,就抛出错,没有执行后续循环以及代码

【总结】

实用于验证拦挡的状况,即没有后续代码。实用于各种循环模式
(然而抛个异样还是感觉怪怪的,不够完满啊)

2、为循环命名,跳出对应的循环

长处:多层循环时十分灵活(想跳出哪一层,就跳出哪一层);循环体前面的代码依然执行
毛病:必须是for循环!

上同样的例子:

const arr = [    {        name: '张三',        fruit: ['苹果', '香蕉']    },    {        name: '李四',        fruit: ['梨', '芒果']    },    {        name: '王五',        fruit: ['樱桃', '西瓜']    },    {        name: '小红',        fruit: ['菠萝', '芒果']    },]let person = undefined// 为紧邻的for循环命名testLoop: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                        // 跳出命名的循环            break testLoop        }    }}console.log('这里依然能够执行', person)


看打印的后果,不仅阻断了命名循环的执行,而且执行命名循环后续的代码!这就很妙了~

【总结】

1、因为后续代码依然执行,所以可用于多种逻辑状况
(比方循环次数十分十分多,你想优化执行速度,只有拿到想到的后果之后,立即终止循环)
2、灵便,非常灵活,跳出指定命名的循环;
3、所以就只好不辞辛苦地写for循环了,不过我认为值得

【番外篇】

我在想,是只须要变量紧邻的循环用for就能够了,还是每层都得用for循环呢??

机智(偷懒)的我,还是验证了一下,把第二层换成forEach

果不其然,事实给了我惨重的一击!

let person = undefinedtestLoop2:for (let i = 0; i < arr.length; i++) {    arr[i].fruit.forEach(item => {       if (item === '芒果') {            person = arr[i].name            break testLoop2       }    })}console.log('这里依然能够执行', person)


o(╥﹏╥)o

老老实实写for吧~