注意:我想使用while()
回调函数中断forEach
循环,而不是破坏forEach
本身。
我正在尝试在同一个while循环中的forEach方法中打破while
循环,但是Javascript不喜欢函数内的break
语句。它根据环境吐出unsynctatic break
或illegal break statement
。
我正在尝试做这样的事情:
while(true) {
example = [false, false, true];
example.forEach(function breakWhile(element) {
if(element) {break;}
})
}
我知道for...of
(加上使用while
循环上的标签)解决了这个问题,但它真的是我唯一的出路吗?我更喜欢使用array.forEach
。更糟糕的是,我可能想要使用一个函数,这也被JS引擎低估了。
答案 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;
}