JS循环跳出方法(filter,map,some,find,every等)

前言
数组的原生方法-MDN

数组方法很多,有时候我们需要跳出循环以提高代码的执行效率。

本文为粘贴别人文章(文末有传送门),但以下方法均测试过,如测试有不同结果欢迎留言

结论总结

1 for循环 成功 跳出本次循环 不合法 不合法 不合法 √
2 Array.forEach() 不合法 不合法 跳出本次循环 跳出本次循环 跳出本次循环 ×
3 for...in 成功 跳出本次循环 不合法 不合法 不合法 √
4 Array.map() 不合法 不合法 跳出本次循环 跳出本次循环 跳出本次循环 ×
5 Array.some() 不合法 不合法 跳出本次循环 成功 跳出本次循环 √
6 Array.every() 不合法 不合法 成功 跳出本次循环 成功 √
7 Array.filter() 不合法 不合法 跳出本次循环 跳出本次循环 跳出本次循环 ×

forEach、map和filter目前我不知有什么办法停止当前遍历,表格(图片)中提到的都是可以跳出本次循环的


2020.10.16 10:20 更新:

抛出错误可以中断 Foreach 循环,注意是跳出这个循环,如下

[1,2,3].forEach(i => { if(i==2) throw "中断循环"; console.log(i) })
//1
//Uncaught 中断循环

⚠️⚠️⚠️ 需要注意,throw抛出错误,影响后面代码执行,确实需要用此种方法中断,需要结合try…catch
forEach 换成 filtermap 结果依旧同上

另外

  • filter: 主要是过滤数组的作用,里面加条件过滤就行了,跳出循环个人认为没有意义。
  • map: 主要是重新加工每个数组项的作用,如果需要跳过某些元素,那你就应该考虑 map 是不是用错了(考虑filter,或者for。for循环是比forEach更有优势,尽管优势及其微小)【(❁´◡`❁)】

  • for循环
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

for (var i = 0; i < arr.length; i++) {
    if (i === 2) {
        break;// ['a', 'b'] 成功跳出循环
        // continue;// ['a', 'b', 'd', 'e'] 只能跳出本次循环
        // return;// Uncaught SyntaxError: Illegal return statement
        // return true;// Uncaught SyntaxError: Illegal return statement
        // return false;// Uncaught SyntaxError: Illegal return statement
    }
    show.push(arr[i]);
}
  • Array.forEach()
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

arr.forEach((item, index) => {
    if (index === 2) {
        // break;// Uncaught SyntaxError: Illegal break statement
        // continue;// Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
        // return;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return true;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return false;// ['a', 'b', 'd', 'e'] 只能跳出本次循环
    }
    show.push(item);
})
  • for…in…
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

for (var item in arr) {
    if (item === '2') {
        break;// ["a", "b"] 跳出循环成功
        // continue;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return;// Uncaught SyntaxError: Illegal return statement
        // return true;// Uncaught SyntaxError: Illegal return statement
        // return false;// Uncaught SyntaxError: Illegal return statement
    }

    show.push(arr[item]);
}

Array.map()

var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

arr.map((item, index) => {
    if (index === 2) {
        // break;// Uncaught SyntaxError: Illegal break statement
        // continue;// Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
        // return;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return true;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return false;// ["a", "b", "d", "e"] 只能跳出本次循环
    }
    show.push(item);
})
  • Array.some()
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

arr.some((item, index) => {
    if (index === 2) {
        // break;// Uncaught SyntaxError: Illegal break statement
        // continue;// Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
        // return;// ["a", "b", "d", "e"] 只能跳出本次循环
        return true;// ["a", "b"] 成功跳出循环
        // return false;// ["a", "b", "d", "e"] 只能跳出本次循环
    }
    show.push(item);
})
  • Array.every()
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

arr.every((item, index) => {
    if (index === 2) {
        // break;// Uncaught SyntaxError: Illegal break statement
        // continue;// Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
        // return;// ["a", "b"] 成功跳出循环
        // return true;// ["a", "b", "d", "e"] 只能跳出本次循环
        return false;// ["a", "b"] 成功跳出循环
    }
    return show.push(item);
})

someevery返回值均为布尔值someevery 不同,some 遍历项中一个为真全部即为真,而 every 遍历项中全部为真才行。some 遍历中返回 true 才会退出执行,而 every 则需要返回 false 才会退出执行。

  • Array.filter()
var arr = ['a', 'b', 'c', 'd', 'e'];
var show = [];

arr.filter((item, index) => {
    if (index === 2) {
        // break;// Uncaught SyntaxError: Illegal break statement
        // continue;// Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
        // return;// ["a", "b", "d", "e"] 只能跳出本次循环
        // return true;// ["a", "b", "d", "e"] 只能跳出本次循环
        return false;// ["a", "b", "d", "e"] 只能跳出本次循环
    }
    show.push(item);
})

以上。


【思否-原文链接】起飞~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值