问题描述
我有数组对象,所以我需要组对象具有相同的BrandId,并具有特殊属性。
arayExample:
[
{
"BrandId": "5a52f163b56fbc1164c3f69a","ActionCode": "MapNewInsert","Total": 126,"TotalProduct": 127,"TotalBrand": 2
},{
"BrandId": "5a52f163b56fbc1164c3f69a","ActionCode": "MapNewUpdate","Total": 0,"ActionCode": "VerifyUpdate","ActionCode": "VerifyDelete","ActionCode": "Solved","Total": 1,{
"BrandId": "5c10d62821cdfb2448a10a9c","Total": 398,"TotalProduct": 398,"TotalBrand": 2
}
]
特殊是:
“ ActionCode”中的value
成为key
的{{1}},而该项目中的Total成为该value
的{{1}}。
示例:ActionCode的key
是 MapNewInsert ,并且在此项目中具有“总数”值。变成:“ MapNewInsert”:“ 398(总值)”
这是我想要的结果:
value
非常感谢您的帮助
解决方法
这可以通过Array Reduce Function完成。结果并不完全相同,但是您可以查看它是否对您有用。
let arr = [
{
BrandId: '5a52f163b56fbc1164c3f69a',ActionCode: 'MapNewInsert',Total: 126,TotalProduct: 127,TotalBrand: 2
},{
BrandId: '5a52f163b56fbc1164c3f69a',ActionCode: 'MapNewUpdate',Total: 0,ActionCode: 'VerifyUpdate',ActionCode: 'VerifyDelete',ActionCode: 'Solved',Total: 1,{
BrandId: '5c10d62821cdfb2448a10a9c',Total: 398,TotalProduct: 398,TotalBrand: 2
}
];
const result = [
...arr
.reduce((r,o) => {
const record = r.get(o.BrandId) || {};
r.set(o.BrandId,{
BrandId: o.BrandId,Statistics: {
[o.ActionCode]: o.Total,...record.Statistics
}
});
return r;
},new Map())
.values()
];
console.log(result);