【问题标题】:Group Object have same Property in Array Object in Javascript组对象在Javascript中的数组对象中具有相同的属性
【发布时间】:2020-09-29 09:00:05
【问题描述】:

我有数组对象,所以我需要组对象具有相同的 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,该项目中的Total 变为value 中的key

示例:ActionCode 有 valueMapNewInsert 并且在这个项目中有 Total number 值。那变成:“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 来实现这一目标
  • 你能再解释一下ActionKey的逻辑吗...因为你的输出似乎没有VerifyUpdate或VerifyDelete
  • 为什么在没有名为MapNewDelete的操作时会有MapNewDelete属性
  • 请更新您的问题并进行一些修正
  • 哦,是的,对不起,MapNewDelete 是属性VerifyDelete,因为我必须在完成组后再更改其名称。抱歉我迟到了

标签: javascript object reduce arrayobject


【解决方案1】:

可以使用 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);

【讨论】:

  • 但是你的输出与要求的输出不匹配
  • 很有帮助,我需要。谢谢你,对不起@JaromandaX 我问的话题有点离题……给你带来麻烦:D
  • Statistics 中的关键输出:D 我忘了解释它=(对不起
猜你喜欢
  • 2013-10-14
  • 2018-10-24
  • 2018-11-03
  • 2020-06-30
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多