我有一个包含一堆模型的集合,这些模型看起来像以下示例:
{
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并循环遍历并跟踪指标名称,同时求和值并消除重复(听起来很la脚)。
我的问题是,是否有另一种更好的方法使用下划线其他方法之一来执行此操作。我可以看到地图,查找,查找位置,过滤器等可能是选项,但我不确定。
最佳答案
您可以使用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;
});
}));