forEach 和 map
- 区别
forEach 执行后返回 undefined
map 执行后返回新数组
- 共同点
只能遍历数组并参数都一样
不改变原函数(引用类型除外)
无法中断循环;return 只是结束本地循环,进入下一次循环
break 或 continue 都将会报错
使用抛出异常来中断 forEach/map
try{
[1,2,3,4,5,6].forEach((val, index)=> {
console.log(val);
if(val === 3) {
console.log('满足条件后的操作');
throw new Error();
}
console.log('满足条件后不再执行', val)
})
}catch(e) {
console.log('可以不处理');
}
console.log('继续执行');
使用别的循环代替
- 使用传统 for 循环
var arr = [1,2,3,4,5,6];
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]);
if(arr[i]===3) {
console.log('满足条件后的操作');
break;
}
}
- 使用数组 every/some 循环
var arr = [1,2,3,4,5,6];
arr.every((e)=>{
console.log(e);
if(e === 3) {
console.log('满足条件后的操作');
return false;
}
return true;
})
arr.some((e)=>{
console.log(e);
if(e === 3) {
console.log('满足条件后的操作');
return true;
}
return false;
})
结论
- 碰到需要终止的循环,避免使用 forEach 可以使用 for/for in循环
- es6针对数组可以使用 every/some/find等方式
- forEach/map 循环只能通 return 中断当次循环无法跳出循环
- forEach/map 循环中使用 continue/break 报错
- 如果非要使用 forEach/map 中断循环使用抛出异常
注意
- for/for...of: break跳出本次循环;continue结束本次循环执行下一次循环,没有return。
- for...in:会忽略break || continue。没有return。
- jquery.each: return false跳出本次循;return true结束本次循环执行下一次循环,没有break || continue。
发表评论: