在array.forEach里面打断while循环吗?

时间:2017-09-29 14:48:14

标签: javascript

注意:我想使用while()回调函数中断forEach循环,而不是破坏forEach本身。

我正在尝试在同一个while循环中的forEach方法中打破while循环,但是Javascript不喜欢函数内的break语句。它根据环境吐出unsynctatic breakillegal break statement

我正在尝试做这样的事情:

while(true) {
    example = [false, false, true];
    example.forEach(function breakWhile(element) {
        if(element) {break;}
    })
}

我知道for...of(加上使用while循环上的标签)解决了这个问题,但它真的是我唯一的出路吗?我更喜欢使用array.forEach。更糟糕的是,我可能想要使用一个函数,这也被JS引擎低估了。

1 个答案:

答案 0 :(得分:0)

我认为你最好的选择就是使用旗帜。

let dobreak = false;
while(!dobreak) {
    example = [false, false, true, false];
    example.forEach(function breakWhile(element) {
        if(element) {dobreak = true;}
        else if(!dobreak) {
          console.log(element);
        }
    })
}

另一个想法是创建一个替换内置forEach的函数,在这里我称之为breakForEach如果你在迭代回调中返回true它会破坏forEach,并且还返回true,这样你就可以打破了一会儿。

您甚至可以将其添加到默认的Array.prototype中,但这不可取。

function breakForEach(arr, iter) {
  for(let l = 0; l < arr.length; l ++) {
    if (iter(arr[l])) return true;    
  }
  return false;
}

while(true) {
    var example = [false, false, true, false];
    if (breakForEach(example, function breakWhile(element) {
        if(element) return true;
        console.log(element);
    })) break;
}