2017-12-22 11 views
-2

totalItem数量をJSON配列データで合計するにはどうすればよいですか?例えば、上記のAngular JS - json配列の値をどのように合計できますか?

[{"group": "B", "totalItem": 1}, 
{"group": "A", "totalItem": 1}, 
{"group": "C", "totalItem": 2}, 
{"group": "B", "totalItem": 3}, 
{"group": "A", "totalItem": 6}, 
{"group": "C", "totalItem": 2},] 

どのように私は、角度で同じグループを持っているすべてのtotalItemを合計することができますか? "良い日"

let counters = myArray.reduce((p,n) => { 
    if(p[n.group]) { p[n.group] += n.totalItem; } 
    else { p[n.group] = n.totalItem; } 
    return p; 
}, []); 

これはJavaScriptで共通GROUPBYあるような単純な

+3

あなたはそれをGoogleにしましたか?申し訳ありませんが失礼ですが、これは非常に一般的な問題です。 – Rajesh

+3

Angularはこれを何もしません。それは単純なJavaScript /ロジックです。ループと配列操作について学んでください。そして何か試してみてください。 –

答えて

1

。まず、配列の上にreduce関数があります。配列を通り、必要な処理を行います。

最初のパラメータは、求めていることを実行する関数で、2番目のパラメータは開始値です。

ここでは、空の配列[]から始めます。

次に、アイテムを繰り返し処理します。私は2つの変数を、前の値(最後に返される値)にp、次のもの(配列の現在のオブジェクト)にnと命名しました。

条件は言う:

、アレイ内のグループが存在する場合は、それにtotalItemを追加します。それ以外の場合は、totalItemの値で作成します。

最後に、すべてのグループを含む連想配列があります。

+1

説明がうまくいくはずです。 – Eric

+0

これはJavascriptのgroupBy関数です。それはかなり一般的です、私は説明の必要性はないと思います。しかし、あなたが尋ねたので、私はそれを入れます。 – trichetriche

+0

[]を初期値として使うのはなぜですか?確かにあなたは{}を意味しました。また、中カッコがありません。 –

0

ここでは、プロセスが理解できる方法を示します。

var totals = {}; //This object will have the sums of each group 

//Go through your array 
myArray.forEach(function(item){ 

    if (typeof totals[item.group] === 'undefined')  
     totals[item.group] = item.totalItem   //Create a new group item in the result object 
    else            
     totals[item.group] += item.totalItem;   //Item is there - so aggregate the value 

}) 
関連する問題