前言
数组的原生方法-MDN
数组方法很多,有时候我们需要跳出循环以提高代码的执行效率。
本文为粘贴别人文章(文末有传送门),但以下方法均测试过,如测试有不同结果欢迎留言
结论总结
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
换成filter
与map
结果依旧同上
另外
- 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);
})
some
与 every
的 返回值均为布尔值,some
与 every
不同,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);
})
以上。
【思否-原文链接】起飞~~