2016-11-05 18 views
-1

OrgID、Name、Valueで一意のOrgIDを持つ新しいオブジェクトを作成したいとします。ネストされたjson配列のオブジェクトと合計値をループするjavascript

データ:例えば以下について

{ 
    "id":0, 
    "Value": "12345" 
    "Organisations" 
    { 
     "OrgID": "1", 
     "Name": "A" 
    } 
}, 
{ 
    "id":1, 
    "Value": "74790" 
    "Organisations" 
    { 
     "OrgID": "1", 
     "Name": "A" 
    } 
}, { 
    "id":2, 
    "Value": "89668" 
    "Organisations" 
    { 
     "OrgID": "2", 
     "Name": "C" 
    } 
}, 
{ 
    "id":3, 
    "Value": "23559" 
    "Organisations" 
    { 
     "OrgID": "3", 
     "Name": "D" 
    } 
} 

:ID 0と1との和が発生し、そして3番目と4番目のIDをそのまま。

Final Object = [ 
{1, A, 94521}, 
{2, C, 75463}, 
{3, D, 56743} 
]; 

ネストされたforループを使用して減らしました。しかし、私は必要な結果を得ることができません。

var result = Array.from(
    data.reduce((organisations, obj) => 
     organisations.set(obj.organisations.Name, 
      (organisations.get(obj.organisations.Name) || 0) + +obj.Value), 
     new Map()), 
    ([organ, sum]) => ({organ,sum}) 
); 
+0

あなた '最終Object'配列は、適切なJSのオブジェクトが含まれていません。 – Redu

+0

これは単なる例です。しかし、私は3つの要素を持つオブジェクトの配列を持っています –

+0

私はちょうどIDを確認し、それに応じて値を合計する1つのレベルに行く方法が欲しい。 –

答えて

2

これを試してみてはどうですか?

var data = [ 
 
    { 
 
    "id":0, 
 
    "Value": "12345", 
 
    "Organisations": 
 
    { 
 
     "OrgID": "1", 
 
     "Name": "A" 
 
    } 
 
}, 
 
{ 
 
    "id":1, 
 
    "Value": "74790", 
 
    "Organisations": 
 
    { 
 
     "OrgID": "1", 
 
     "Name": "A" 
 
    } 
 
}, { 
 
    "id":2, 
 
    "Value": "89668", 
 
    "Organisations": 
 
    { 
 
     "OrgID": "2", 
 
     "Name": "C" 
 
    } 
 
}, 
 
{ 
 
    "id":3, 
 
    "Value": "23559", 
 
    "Organisations": 
 
    { 
 
     "OrgID": "3", 
 
     "Name": "D" 
 
    } 
 
} 
 
]; 
 

 
var res = {}; 
 

 
res = Object.keys(data.reduce((res, curr) => { 
 
    res[curr.Organisations.OrgID] = res[curr.Organisations.OrgID] || { 
 
    OrgID: curr.Organisations.OrgID, 
 
    Name: curr.Organisations.Name, 
 
    Value: 0 
 
    }; 
 
    res[curr.Organisations.OrgID].Value += parseInt(curr.Value); 
 
    return res; 
 
}, res)).map(key => res[key]); 
 

 
console.log(res);

関連する問題