如何阻止Javascript forEach?

这个问题在这里已经有了答案:

  • 如何使Array.forEach短路像调用break? 24个答案

  • 你不能从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

    上一篇: how to stop Javascript forEach?

    下一篇: check every element of an array