2016-11-05 260 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);