跳出forEach循环
在循环遍历数组时,for循环可以通过break或者continue进行终止跳出操作;但是箭头函数的普及更多得使用forEach去做循环遍历,这时候想要中途跳出该怎么办呢?
构造场景,将数组中第一个值为5的元素改为10:
const arr = [0,1,2,3,4,5,6,7,8,9];
for (i=0;i<arr.length;i++){
if(arr[i] == 5){
arr[i] = 10;
break;
}
console.log(arr[i]);
}
//0,1,2,3,4,10
用forEach改写
方案一:
arr.forEach(item => {
if(item == 5){
item = 10;
break;
}
console.log(item);
})
//Uncaught SyntaxError: Illegal break statement
所以原生forEach()不支持break操作;
方案二:
arr.forEach(item => {
if(item == 5){
item = 10;
return false;
}
console.log(item);
})
//0,1,2,3,4,6,7,8,9
return false起作用了,但仅仅是终止本次继续执行,后续的循环继续执行;
方案三:
try {
const arr = [0,1,2,3,4,5,6,7,8,9];
arr.forEach(item => {
if(item == 5){
item = 10;
throw new Error("EndIterative");
}
console.log(item);
})
}catch(e){
if(e.message!="EndIterative") throw e;
}
//0,1,2,3,4
forEach()无法通过正常流程终止,所以可以通过抛出异常的方式实现终止循环的目的;
方案四:
arr.every(item => {
if(item == 5){
item = 10;
return false;
}
console.log(item);
return true;
})
//0,1,2,3,4,false
arr.some(item => {
if(item == 5){
item = 10;
return true;
}
console.log(item);
return false;
})
//0,1,2,3,4,true
可以对于some(),return true时会终止循环,对于every(),return false时会种植循环。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!