Reduce an array of objects in java script

Viewed 80

I have an array of objects

[
{
 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'
}
]

And I need the format like

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

My code is

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

But it Output like below

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

Please Help. Thanks for your time

1 Answers

You could group by application by using an object.

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; }

Related