js 如何中断 forEach、map 循环

2020-9-10 Jon js+jquery+ajax

forEach 和 map

  1. 区别
    forEach 执行后返回 undefined
    map 执行后返回新数组
  2. 共同点
    只能遍历数组并参数都一样
    不改变原函数(引用类型除外)
    无法中断循环;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('继续执行');

使用别的循环代替

  1. 使用传统 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;
	}
}
  1. 使用数组 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;
})

结论

  1. 碰到需要终止的循环,避免使用 forEach 可以使用 for/for in循环
  2. es6针对数组可以使用 every/some/find等方式
  3. forEach/map 循环只能通 return 中断当次循环无法跳出循环
  4. forEach/map 循环中使用 continue/break 报错
  5. 如果非要使用 forEach/map 中断循环使用抛出异常

注意

  • for/for...of: break跳出本次循环;continue结束本次循环执行下一次循环,没有return。
  • for...in:会忽略break || continue。没有return。
  • jquery.each: return false跳出本次循;return true结束本次循环执行下一次循环,没有break || continue。

标签: js

分享这篇文章
赞助鼓励:如果觉得内容对您有所帮助,您可以支付宝(左)或微信(右):

声明:如无特殊注明,所有博客文章版权皆属于作者,转载使用时请注明出处。谢谢!

发表评论:

皖ICP备15010162号-1 ©2015-2022 知向前端
qq:1614245331 邮箱:13515678147@163.com Powered by emlog sitemap