2017-08-04 3 views
-2

私の配列内にオブジェクトをグループ化するためにlodashを使用しています。オブジェクトの配列をグループ化し、新しい共通の値を作成するための計算を行う

var grouped = _.groupBy(this.tableData, function(obj) { 
    return obj.key 
}); 

キー値のペアを持つオブジェクトが表示されます。

{mykey1: [{obj1}, {obj2}], mykey2: [obj1]} 

私の質問は、どのように各キーの中のオブジェクトをループして計算を行うことができるかです。たとえば、オブジェクトに属性がある場合は、cost、キーの各オブジェクト内のすべてのコストを合計しますか?

+0

が見えます。例えばhttps://stackoverflow.com/questions/45410237/javascript-sorting-and-grouping-items-in-array/45410783#45410783 – georg

+0

'var grouped:any = _(this.tableData).groupBy(これを参照してください。たtableData、関数(OBJ){ 戻りobj.key })mapValues(XS => { }); ' – blackdaemon

+0

が試みは、errroを取得し、'のparamsは.....エラー – blackdaemon

答えて

0

あなたが_.mapValues_.sumByの組み合わせを使用することができます。以下

var summed = _.mapValues(grouped, function(v){ 
    return _.sumBy(v, 'cost'); 
}); 

ライブ例:

var tableData = [ 
 
{key:"obj1",cost:1}, 
 
{key:"obj1",cost:1}, 
 
{key:"obj1",cost:1}, 
 
{key:"obj2",cost:1}, 
 
{key:"obj2",cost:1} 
 
] 
 

 
var grouped = _.groupBy(tableData, function(obj) { 
 
    return obj.key 
 
}); 
 

 
var summed = _.mapValues(grouped, function(v){ 
 
    return _.sumBy(v, 'cost'); 
 
}); 
 
console.log(summed);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

+0

が使用できると一致しない供給しました_.sumBy(v、 'cost') ' –

+0

@ YuryTarabankoありがとう - 私はバニラジャバスクリプトにロダッシュ/アンダースコアメソッドよりもよく知られています。 – Jamiec

0

あなたはネイティブのJavaScriptを行うことができます:

//let obj = {key1: [{cost: 1}, {cost: 2}], key2: [{cost: 3}]}; example input 
Object.values(obj).reduce((sum, arr)=> sum + arr.reduce((subsum, element)=>subsum + element.cost, 0), 0); 

は説明:あなたは_.mapValues(グループ化し、グループ=> ....) ``したいよう

Object.values(obj) //-> [[{cost: 1}, {cost: 2}], [{cost: 3}]] 
[1, 2, 3].reduce((sum, element)=> sum + element), 0) //-> reduce (converting a list of things into one) 
関連する問題