2016-11-05 263 views
-1

我想創建一個新的對象與OrgID,名稱和值與唯一的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" 
    } 
} 

例如以下:編號0和1應該發生,並且第三和,因爲它是第四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,然後相應地對這些值求和。 –

回答

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);