1

次の例のようなモデルがたくさんあるコレクションがあります。

{
    metricName : 'clicks',
    metricValue : 100
}

私が欲しいのは、コレクションを検索し、同じmetricNameを持つすべてのモデルを、すべての値の合計を持つ1つのモデルに統合することです。

それで

{
    metricName : 'clicks',
    metricValue : 100
}

{
    metricName : 'otherMetric',
    metricValue : 100
}

{
    metricName : 'clicks',
    metricValue : 100
}

になる

{
    metricName : 'clicks',
    metricValue : 200
}

{
    metricName : 'otherMetric',
    metricValue : 100
}

アンダースコアを使用して、これをできるだけ効率的かつ簡単に解決しようとしています。

1つの解決策は、_。eachを使用してループし、メトリック名を追跡しながら、値を合計して重複を排除することです(音が悪い)。

私の質問は、他の方法にアンダースコアを付けてこれを行うための別のより良い方法があるかどうかです。地図、検索、検索場所、フィルターなどがオプションになるかもしれませんが、よくわかりません。

4

2 に答える 2

2

groupByand でかわいいことができます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 に答える