How to stop lodash.js _.each loop?
我有这行代码:
1 2 3 4 5 6 7 8
| _.each($scope.inspectionReviews, function (value, key) {
alert("status=" + value.IsNormal +" " +"name=" + value.InspectionItemName);
if (!value.IsNormal) {
$scope.status = false;
return;
}
$scope.status = true;
}) |
在某个时刻,我想停止循环,但似乎返回不工作。
我怎样才能停止循环?
- 你试过return false吗?
- 试着去做
- 如何停止for循环的可能副本?
- @guiimamura-这不是一个常规的for循环。这是一个lodash或下划线.each()循环。你不能用break来解决这个问题。
- 你给这辆车贴上了lodash和underscore.js的标签,是哪辆?
- @朋友00谢谢你指出。我现在正在研究罗达什,看看它是如何工作的,我会在后面看到下划线。
把这个放在一个木屑里,每个都可以打碎。
编辑:我看到标题改为下划线。是下划线还是罗达什?正如我在上面指出的,您可以在lodash中打破每一个,但强调了我相信仿效foreach,而本机并没有提供这一点。
- 与return相比,return false;有什么优势吗?还是仅仅为了可读性?
- @雷蒙德阿布如果它的罗达什优势是打破了循环。仅仅使用返回不会跳出循环,必须返回false才能实现这一点。
- @不带参数的rayondabre return等价于return undefined,这与不使用return语句而从函数末尾脱落相同。
- @Barmar,所以只有EDOCX1[1]会返回控制流并中断迭代,对吗?
- @Rayondabre不,像他说的返回只是返回未定义的,只返回false将中断循环并停止任何后续迭代。
- @rayondabre通常迭代函数没有return语句,因此它隐式返回undefined。如果返回undefined停止迭代,则永远不会得到多个迭代。这就是为什么它需要一个明确的return false作为标志来告诉它要断开。
- 返回;在这种情况下就像继续。
- 如果你改为返回真,会发生什么?
- @s1moner3d每个循环将继续,直到返回false或它完成为止。
- @无神论者谢谢你!这是为了涵盖每一个未定义正确错误的案例。
- 仅供参考,关于下划线/lodash名称:stackoverflow.com/a/13898916/493807——简而言之,lodash可以用作下划线的替代品。
- 你最好解释一下为什么你的答案会有帮助。
- 因为流量控制更好。答案显示了不返回任何东西(这将导致循环跳到下一个元素)或返回false(这将导致循环一起停止)之间的区别,我今天学到了一些东西。谢谢@ jack wu
- 应该是公认的答案
- @查理·卡弗,不客气
如果要测试某个条件是否适用于集合的任何成员,请使用下划线的some(别名为any)而不是each。
1 2 3 4 5
| var hasAtLeastOneFalseStatus = _.any($scope.inspectionReviews, function (value, key) {
return !value.IsNormal;
})
$scope.status = hasAtLeastOneFalseStatus ? false: true; |