JS使用return在forEach中跳出循环无效
一、问题
开发过程中,在forEach中**return**没有生效。
excelareaArr.forEach(function (ext) {
if (!contains(areaArr, ext)) {
return {message: '请导入用户符合权限的区域!'};
}
});
当时真的很纳闷,刚开始以为自己代码的错误,可检查了几次没发现问题。网上一查才知道forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说forEach遍历并不能被终止,会被继续执行。
二、解决方法
1.通过for来遍历实现
for (var i= 0;i< excelareaArr.length; i++) {
if (!contains(areaArr, excelareaArr[i])) {
return {message: '请导入用户符合权限的区域!'};
}
}
2.把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止。
function foreach(a,f,t){
try { a.forEach(f,t); }
catch(e){
if(e === foreach.break)return;
else throw e;
}
}
foreach.break = new Error("StopIteration");
转自: 《JavaScript权威指南(6版)》7.9.1 forEach()
还没有评论,来说两句吧...