如何阻止Javascript forEach?
这个问题在这里已经有了答案:
你不能从forEach
中断。 不过,我可以想到三种方法来伪造它。
1.丑陋的方式 :将第二个参数传递给forEach
以用作上下文,并在其中存储布尔值,然后使用if
。 这看起来很糟糕。
2.有争议的方法 :在try-catch
块中包围整个事物,并在你想要休息时抛出异常。 这看起来很糟糕,可能会影响性能,但可以封装。
3.趣味之道 :使用every()
。
['a', 'b', 'c'].every(function(element, index) {
// Do your thing, then:
if (you_want_to_break) return false
else return true
})
你可以使用some()
来代替,如果你想return true
来中断。
打破Array#forEach是不可能的。 (您可以在链接页面的Firefox中检查实现它的源代码,以确认这一点。)
相反,你应该使用正常的for
循环:
function recurs(comment) {
for (var i = 0; i < comment.comments.length; ++i) {
var subComment = comment.comments[i];
recurs(subComment);
if (...) {
break;
}
}
}
(或者,如果你想变得更聪明一些, comment.comments[i]
永远是一个对象:)
function recurs(comment) {
for (var i = 0, subComment; subComment = comment.comments[i]; ++i) {
recurs(subComment);
if (...) {
break;
}
}
}
正如其他人指出的,你不能取消forEach
循环,但这是我的解决方案:
ary.forEach(function loop(){
if(loop.stop){ return; }
if(condition){ loop.stop = true; }
});
当然这实际上并没有打破循环,它只是防止在“break”之后的所有元素上执行代码
链接地址: http://www.djcxy.com/p/70037.html