我有一个包含一堆模型的集合,这些模型看起来像以下示例:

{
    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脚)。

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

最佳答案

您可以使用groupByreduce做一些可爱的事情:

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;
  });
}));

09-18 03:16