【问题标题】:Reduce an array of objects in java script [duplicate]减少java脚本中的对象数组[重复]
【发布时间】:2021-06-13 11:57:31
【问题描述】:

我有一个对象数组

[
{
 job_code: '123',
 application: 'Tree',
 permission_name: 'AP_SEARCH'
},
{
 job_code: '123',
 application: 'Dog',
 permission_name: 'ALL_FA_SEARCH'
},
{
 job_code: '123',
 application: 'Tree',
 permission_name: 'AP_DOWNLOAD'
}
]

我需要这样的格式

[
{ name: 'Tree', permissions: ['AP_SEARCH', AP_DOWNLOAD'] },
{ name: 'Dog', permissions: 'ALL_FA_SEARCH' },
]

我的代码是

const allowedApplications = rdsData.map((key) => ({ name: key.application, 
permissions: key.permission_name }));
console.log(rdsData);

但它的输出如下所示

[
{ name: 'Tree', permissions: 'AP_SEARCH' },
{ name: 'Dog', permissions: 'ALL_FA_SEARCH' },
{ name: 'Tree', permissions: 'AP_DOWNLOAD' }
]

请帮忙。感谢您的宝贵时间

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    您可以使用对象按application 分组。

    const
        data = [{ job_code: '123', application: 'Tree', permission_name: 'AP_SEARCH' }, { job_code: '123', application: 'Dog', permission_name: 'ALL_FA_SEARCH' }, { job_code: '123', application: 'Tree', permission_name: 'AP_DOWNLOAD' }],
        result = Object.values(data.reduce((r, { application: name, permission_name }) => {
            r[name] ??= { name, permissions: [] };
            r[name].permissions.push(permission_name);
            return r;
        }, {}));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • [ { application: 'Tree', permission_name: [ 'AP_SEARCH', 'AP_DOWNLOAD' ] }, { application: 'Dog', permission_name: 'ALL_FA_SEARCH' } ] 这是你的结果。但在数组中也需要“All_FA_SEARCH”
    • 它看起来与想要的不同。无论如何,请参阅编辑。
    • 我知道你为什么放 ??=
    • 它是一个logical nullish assignment ??=,就像a ??= [],是a = a || []的缩写形式。
    • 你好尼娜舒尔茨。我刚刚想通了。在响应中,它应该是“name”和“permissions”而不是“application”和“permission_name”。如果可以,请更新答案
    猜你喜欢
    • 2017-08-17
    • 1970-01-01
    • 2021-04-02
    • 2019-01-26
    • 2020-05-22
    • 2021-01-15
    • 2017-05-23
    • 2018-02-12
    • 2020-12-30
    相关资源
    最近更新 更多