2016-08-04 1 views
2

共通キーを共有するオブジェクトの値を合計するにはどうすればよいですか?私は Lodashを使用する必要があるので、私はこれらの配列が巨大になる場合は、良いパフォーマンスが必要です。Lodashを使ってキーで値を合計する

var prjMgrValues = [ 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":12000}, 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":750000}, 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
] 

私は、これは、それぞれのユニークな要素のための還元の場合である

[ 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":762000}, 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
] 
+14

"行きますか"?真剣ですか?あなたは何をした? – 1252748

+3

したがって、組み込みツールの周りにヘルパー関数を追加するライブラリは、組み込みツールよりも速いはずですか?小さな[テストケース](https://jsfiddle.net/727reyn9/)。スポイラー:lodashは大きさが遅い – Andreas

+0

@Andreas True。 OPの観点からは、組み込みツールを効率的に使用する方法を知らないかもしれないので、彼らは自分自身で書いたものよりもロダッシュが優れていると信じていました。あなたの "組み込み"コードは答えになるはずです。 – 4castle

答えて

23

の出力を探しています。

私は常に_.groupByを使用し、次に_.mapを還元を適用した後の配列に使用します。この場合、縮小操作は_.sumByです。

var prjMgrValues = [ 
 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":12000}, 
 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":750000}, 
 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
 
]; 
 

 
var output = 
 
    _(prjMgrValues) 
 
    .groupBy('proj_mgr') 
 
    .map((objs, key) => ({ 
 
     'proj_mgr': key, 
 
     'submitted_dollars': _.sumBy(objs, 'submitted_dollars') })) 
 
    .value(); 
 

 
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>

+0

この種の操作は本当に一般的です(なぜ私が答えたのか)。私が最後に使用したのは[ここ](http://stackoverflow.com/q/38485493/5743988)で、その前に私は[ここ](http://stackoverflow.com/q/38438645/5743988) 。それで、心に留めておくのが良い方法です。 – 4castle

関連する問題