我有一个包含大量模型的集合,如下例所示:
{
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并循环并跟踪度量标准名称,同时对值进行求和并消除欺骗(听起来很蹩脚)。
我的问题是,是否有另一种更好的方法,使用下划线其他方法之一。我可以看到也许map,find,findwhere,filter等可能是选项,但我不确定。
答案 0 :(得分:2)
你可以用groupBy
和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;
});
}));
答案 1 :(得分: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');
});
}