组对象在 Javascript 中的数组对象中具有相同的 属性
Group Object have same Property in Array Object in Javascript
我有数组对象,所以我需要组对象具有相同的 BrandId,具有特殊的 属性。
数组示例:
[
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "MapNewInsert",
"Total": 126,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "MapNewUpdate",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "VerifyUpdate",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "VerifyDelete",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "Solved",
"Total": 1,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5c10d62821cdfb2448a10a9c",
"ActionCode": "MapNewInsert",
"Total": 398,
"TotalProduct": 398,
"TotalBrand": 2
}
]
特别之处在于:
“ActionCode”中的 value
变为 key
,该项目中的总计变为 key
的 value
。
示例:ActionCode 有 value
是 MapNewInsert 并且在此项中有总数值。那变成:“MapNewInsert”:“398(总价值)”
这是我想要的结果:
[
"BrandId": "5a52f163b56fbc1164c3f69a",
"Statistics": {
"MapNewDelete": 0
"MapNewInsert": 126
"MapNewUpdate": 0
"Solved": 1
}
},
{
"BrandId": "5c10d62821cdfb2448a10a9c",
"Statistics": {
"MapNewDelete": 0
"MapNewInsert": 398
"MapNewUpdate": 0
"Solved": 0
}
}
]
非常感谢您的帮助
可以用 Array Reduce Function 来完成。结果并不完全相同,但您可以看看它是否适合您。
let arr = [
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'MapNewInsert',
Total: 126,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'MapNewUpdate',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'VerifyUpdate',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'VerifyDelete',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'Solved',
Total: 1,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5c10d62821cdfb2448a10a9c',
ActionCode: 'MapNewInsert',
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);
我有数组对象,所以我需要组对象具有相同的 BrandId,具有特殊的 属性。
数组示例:
[
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "MapNewInsert",
"Total": 126,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "MapNewUpdate",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "VerifyUpdate",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "VerifyDelete",
"Total": 0,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5a52f163b56fbc1164c3f69a",
"ActionCode": "Solved",
"Total": 1,
"TotalProduct": 127,
"TotalBrand": 2
},
{
"BrandId": "5c10d62821cdfb2448a10a9c",
"ActionCode": "MapNewInsert",
"Total": 398,
"TotalProduct": 398,
"TotalBrand": 2
}
]
特别之处在于:
“ActionCode”中的 value
变为 key
,该项目中的总计变为 key
的 value
。
示例:ActionCode 有 value
是 MapNewInsert 并且在此项中有总数值。那变成:“MapNewInsert”:“398(总价值)”
这是我想要的结果:
[
"BrandId": "5a52f163b56fbc1164c3f69a",
"Statistics": {
"MapNewDelete": 0
"MapNewInsert": 126
"MapNewUpdate": 0
"Solved": 1
}
},
{
"BrandId": "5c10d62821cdfb2448a10a9c",
"Statistics": {
"MapNewDelete": 0
"MapNewInsert": 398
"MapNewUpdate": 0
"Solved": 0
}
}
]
非常感谢您的帮助
可以用 Array Reduce Function 来完成。结果并不完全相同,但您可以看看它是否适合您。
let arr = [
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'MapNewInsert',
Total: 126,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'MapNewUpdate',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'VerifyUpdate',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'VerifyDelete',
Total: 0,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5a52f163b56fbc1164c3f69a',
ActionCode: 'Solved',
Total: 1,
TotalProduct: 127,
TotalBrand: 2
},
{
BrandId: '5c10d62821cdfb2448a10a9c',
ActionCode: 'MapNewInsert',
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);