3D array from two arrays of objects

55 Views Asked by At
let permissions = [
    {
        id: 1,
        name: "Inventory",
        permission: "inventory"
    },
    {
        id: 2,
        name: "Inventory read",
        permission: "inventory:read"
    },
    {
        id: 3,
        name: "Purchase Orders",
        permission: "purchase-orders"
    },
    {
        id: 4,
        name: "Purchase Orders create",
        permission: "purchase-orders:create"
    }
];


let roles = [
    {
        id: 1,
        name: "Admin"
    },
    {
        id: 2,
        name: "Manager"
    }
];

I need to have an array of permissions grouped by first part of "permission" that has properties of permission name and roles that each have the grouped permissions

Originally I have been grouping the permissions by pushing to groups[permission.split(':')] then looping through permissions and within the loop, looping the roles in my template.

I now need to build the data first.

I need the following output:

let list = [
{
    permission: 'Inventory',
    Admin: [
        {
            id: 1,
            name: "Inventory",
            permission: "inventory"
        },
        {
            id: 2,
            name: "Inventory read",
            permission: "inventory:read"
        },
    ],
    Manager: [
        {
            id: 1,
            name: "Inventory",
            permission: "inventory"
        },
        {
            id: 2,
            name: "Inventory read",
            permission: "inventory:read"
        },
    ]
},
{
    permission: 'Purchase Orders',
    Admin: [
        {
            id: 3,
            name: "Purchase Orders",
            permission: "purchase-orders"
        },
        {
            id: 4,
            name: "Purchase Orders create",
            permission: "purchase-orders:create"
        }
    ],
    Manager: [
        {
            id: 3,
            name: "Purchase Orders",
            permission: "purchase-orders"
        },
        {
            id: 4,
            name: "Purchase Orders create",
            permission: "purchase-orders:create"
        }
    ]
}

];

0

There are 0 best solutions below