我可以从另一个_内部打破_每个?

时间:2014-12-02 21:48:55

标签: javascript underscore.js

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

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

1 个答案:

答案 0 :(得分:2)

引用下划线文档:

  

同样值得注意的是,每个循环都不能被打破 - 打破,改为使用_.find。

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

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

或者不使用嵌套的_.each循环,一种优雅的方法是使用cartesian product

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

虽然一个普通的JS for循环也可以工作,但可能会更快。