JS使用return在forEach中跳出循环无效

柔光的暖阳◎ 2022-03-02 12:10 595阅读 0赞

一、问题

  1. 开发过程中,在forEach中**return**没有生效。
  2. excelareaArr.forEach(function (ext) {
  3. if (!contains(areaArr, ext)) {
  4. return {message: '请导入用户符合权限的区域!'};
  5. }
  6. });

当时真的很纳闷,刚开始以为自己代码的错误,可检查了几次没发现问题。网上一查才知道forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说forEach遍历并不能被终止,会被继续执行。


二、解决方法

1.通过for来遍历实现

  1. for (var i= 0;i< excelareaArr.length; i++) {
  2. if (!contains(areaArr, excelareaArr[i])) {
  3. return {message: '请导入用户符合权限的区域!'};
  4. }
  5. }

2.把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止。

  1. function foreacha,f,t){
  2. try { a.forEachf,t); }
  3. catche){
  4. ife === foreach.breakreturn;
  5. else throw e;
  6. }
  7. }
  8. foreach.break = new Error"StopIteration");

转自: 《JavaScript权威指南(6版)》7.9.1 forEach()

发表评论

表情:
评论列表 (有 0 条评论,595人围观)

还没有评论,来说两句吧...

相关阅读