如何停止lodash.js中的_.each循环?

56
我有这样一段代码:

rows:

_.each($scope.inspectionReviews, function (value, key) {
    alert("status=" + value.IsNormal + "   " + "name=" + value.InspectionItemName);
    if (!value.IsNormal) {
        $scope.status = false;
        return;
    }
    $scope.status = true;
})

在某个时刻,我想停止循环,但似乎 return 不起作用。

我该如何停止循环?


你试过使用 return false 吗? - adeneo
尝试使用 break 来中断它。 - Gui Imamura
可能是如何停止for循环?的重复。 - Jesse
1
@GuiImamura - 这不是普通的 for 循环。这是 lodash 或 underscore 的 .each() 循环。你不能使用 break - jfriend00
2
你已经打了 lodashunderscore.js 的标签 - 到底是哪一个? - Quentin
@jfriend00 谢谢你指出来。我现在正在学习lodash,看看它是如何工作的,接下来我会学underscore。 - Gui Imamura
3个回答

114
return false;

在lodash的each中使用它来中断循环。

编辑:我已经看到标题被改为下划线。是下划线还是lodash?如我上面所指出的,您可以在lodash中打破each,但我认为underscore模拟forEach,而原生不提供该功能。


1
return false; 相对于 return 有什么优势吗?还是只为了可读性? - Rayon
5
@RayonDabre return没有参数时等同于return undefined,也就是函数末尾没有使用return语句而直接结束函数的执行。 - Barmar
7
通常,迭代函数并不包含return语句,因此它会隐式返回undefined。如果返回undefined就能停止迭代,你将永远无法超过一次迭代。这就是为什么需要一个显式的return false作为标志来告诉它停止迭代。 - Barmar
1
@AtheistP3ace 谢谢您!这覆盖了每种情况 undefined|true|false - s1moner3d
1
关于Underscore/LoDash名称的信息:https://dev59.com/RmYr5IYBdhLWcg3wTYcQ#13898916 -- 简而言之,LoDash可以用作Underscore的替代品。 - Andy
显示剩余6条评论

24
  • return false => 它与使用 break; 的效果完全相同。

  • return => 这与使用 continue; 相同。


如果您能解释一下为什么您的答案会有帮助,那将更好。 - Anh Pham
1
因为流程控制,返回值更好。答案显示了不返回任何内容(这将导致循环跳到下一个元素)或返回false(这将导致循环完全停止)之间的区别。我今天学到了一些东西。谢谢@jack wu。 - salgmachine

3
如果您想测试集合中的任何成员是否满足某个条件,请使用 Underscore 的 some 方法(别名为 any),而不是使用 each
var hasAtLeastOneFalseStatus = _.any($scope.inspectionReviews, function (value, key) {
    return !value.IsNormal;
})

$scope.status = hasAtLeastOneFalseStatus ? false: true;

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