组对象在 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,该项目中的总计变为 keyvalue

示例:ActionCode 有 valueMapNewInsert 并且在此项中有总数值。那变成:“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);