我可以从另一个_each内部打破一个_each吗?

Can I break an _each from inside another _each?

本文关键字:each 一个 另一个 内部 我可以      更新时间:2023-09-26

我是下划线的新手。对于外部_each循环,我希望只计算一次转换。换句话说,我希望它在第一次转换后停止.y++。这可能吗?

_.each(conversions, function(conversion){
 _.each(user.apilog, function(event){
        if( conversion.conditional(event) ){
            conversion.y++;
        }
    })
})
引用

下划线文档:

同样需要注意的是,每个循环不能被打破 — 要中断,请使用 _.find 代替。

所以不,它不能被打破 - 他们的建议是使用 .find - 它会破坏你从中返回的第一个truthy值 - 这对你嵌套每个都没有帮助,所以你可以设置一个标志:

var flag = false;;
_.find(conversions, function(conversion){
 _.find(user.apilog, function(event){
        if( conversion.conditional(event) ){
            conversion.y++;
            return flag = true;
        }
    });
    return flag;
});

或者不使用嵌套_.each循环,一种优雅的方法是使用笛卡尔乘积:

   var prod = cartProd(conversations, user.apilog);
   _.find(prod, function(item){
        return item[0].conditional(item[1]); // will break on find
   });

尽管普通的旧 JS for 循环也可以工作并且可能会更快。