跳出内部foreach循环

9
我正在尝试使用JavaScript/jQuery中断内部的foreach循环。
result.history.forEach(function(item) {
    loop2:
    item.forEach(function(innerItem) {
        console.log(innerItem);
        break loop2;
    });
}); 

这导致错误'未识别的标签loop2'。这个错误似乎出现在循环之前,其他问题都说这是问题所在。
我做错了什么以及如何修正?
编辑:正确的方法是,foreach循环无法以这种方式中断,但常规for循环可以。以下是有效的代码:
                        result.history.forEach(function(item) {
                            loop2:
                            for (var i = 0; i < item.length; i++) {
                                var innerItem = item[i];
                                console.log(innerItem);
                                break loop2;
                            }
                        });

2
你不能使用 break 做到那个。 - Pointy
https://dev59.com/jXVC5IYBdhLWcg3wykaj#183197 - myselfmiqdad
@miqdadamirali 是的,那就是我所指的链接。 - David Tunnell
@Pointy 我相信你可以,但你真的不应该这样做。 - Mike Cluck
@MikeC 不行,你不能在函数边界跨越标签使用 break:http://www.ecma-international.org/ecma-262/5.1/#sec-12.8 - Pointy
1
@Pointy 猜我在大喊之前应该先验证一下哈哈。我今天学到了新东西。 - Mike Cluck
2个回答

9
如果您需要能够中断迭代,则使用.every()而不是.forEach():
someArray.every(function(element) {
  if (timeToStop(element)) // or whatever
    return false;
  // do stuff
  // ...
  return true; // keep iterating
});

您可以翻转 true/false 逻辑,使用 .some() 替代;基本思路相同。

3
仅供后人参考,这是ECMAScript 5.1及以上版本,因此不支持IE9以下的浏览器。 - shennan

5

无法做到。根据MDN

除了抛出异常之外,没有办法停止或中断 forEach() 循环。如果您需要这样的行为,则 .forEach() 方法是错误的工具,请改用普通循环。如果您正在测试数组元素是否满足谓词并需要布尔返回值,则可以使用 every() 或 some()。


1
你不能中断一个 forEach 循环,但是你可以使用 .some().every() 来代替。 - Pointy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接