我有一个像这样的数组
Result=[{ 'Sum': 4580,'class': '01','pID': 1},
{ 'Sum': 580, 'class': '01','pID': 2},
{ 'Sum': 1280,'class': '01','pID': 3},
{ 'Sum': 5580,'class': '02','pID': 1},
{ 'Sum': 280, 'class': '02','pID': 2},
{ 'Sum': 380,'class': '02','pID': 3}]
我正在尝试将此数组转换为
[{'class':'01','pID1':4580,'pID2':580,'pID3':1280},
{'class':'02','pID1':5580,'pID2':280,'pID3':380}]
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以使用reduce
创建一个以每个class
作为键的累加器对象。如果尚未添加当前的class
,请使用当前的class
值创建密钥。否则,添加一个新密钥"pID"
+当前密钥pID
,其值设置为当前密钥Sum
。然后使用Object.values()
以数组的形式获取merged
对象的值
const input = [{ 'Sum': 4580,'class': '01','pID': 1},
{ 'Sum': 580, 'class': '01','pID': 2},
{ 'Sum': 1280,'class': '01','pID': 3},
{ 'Sum': 5580,'class': '02','pID': 1},
{ 'Sum': 280, 'class': '02','pID': 2},
{ 'Sum': 380,'class': '02','pID': 3}]
const merged = input.reduce((acc, { Sum, class:c, pID }) => {
acc[c] = acc[c] || { class: c }
acc[c]["pID" + pID] = Sum;
return acc;
}, {})
console.log(Object.values(merged))
这是accumulator / merged
对象的样子:
{
"01": {
"class": "01",
"pID1": 4580,
"pID2": 580,
"pID3": 1280
},
"02": {
"class": "02",
"pID1": 5580,
"pID2": 280,
"pID3": 380
}
}
答案 2 :(得分:0)
以下功能将为您进行转换。
像transform(Result);
这样输入数据
function transform(result) {
const map = {};
result.forEach(data => {
if (!map[data.class]) {
map[data.class] = { 'class': data.class };
}
map[data.class]['pID' + data.pID] = data.Sum;
});
return Object.keys(map).map(key => map[key]); // return Object.values(map);
}