1

我有一个包含一堆模型的集合,如下例所示:

{
    metricName : 'clicks',
    metricValue : 100
}

我想要的是搜索集合并将所有具有相同 metricName 的模型合并到一个模型中,该模型具有所有值的总和。

所以

{
    metricName : 'clicks',
    metricValue : 100
}

{
    metricName : 'otherMetric',
    metricValue : 100
}

{
    metricName : 'clicks',
    metricValue : 100
}

变成

{
    metricName : 'clicks',
    metricValue : 200
}

{
    metricName : 'otherMetric',
    metricValue : 100
}

我试图通过使用下划线来尽可能高效和轻松地解决这个问题。

我可以看到一种解决方案是使用 _.each 并循环并跟踪指标名称,同时对值求和并消除欺骗(听起来很蹩脚)。

我的问题是,是否有另一种更好的方法可以使用以下划线的其他方法之一来做到这一点。我可以看到地图、查找、查找位置、过滤器等可能是选项,但我不确定。

4

2 回答 2

2

groupBy你可以用and做一些可爱的事情reduce

collection.reset(_.map(_.groupBy(collection.toJSON(), 'metricName'), function(group) {
  return _.reduce(group, function(memo, item) {
    if(!memo) return item;
    memo.metricValue+=item.metricValue;
    return memo;
  });
}));
于 2013-01-31T22:41:24.673 回答
0

collection.add你可以

function onAdd(model){
    _.each(collection.where({metricName: model.get('metricName')}), function(item, i, array){
        item.set('metricValue', item.get('metricValue') + model.get('metricValue');
    });
}
于 2013-01-31T21:53:22.353 回答