-3

I current have one array:

[
    {
        Id: 14,
        userRoleId: 2,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 2,
    },
    {
        Id: 15,
        userRoleId: 3,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 3,
    },
    {
        Id: 16,
        userRoleId: 4,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 3,
    },
    {
        Id: 17,
        userRoleId: 5,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 1,
    }
]

How can I generate the new arrays based on the userScopeId?

The arrays name will be userScopeArrayuserScopeId, and the array content is the userScopeId matching content.

So it will be like:

userScopeIdArray1:
[
    { Id: 17, userRoleId: 5, userResourceId: 2, userActionId: 2 }
]

userScopeIdArray2:
[
    { Id: 14, userRoleId: 2, userResourceId: 2, userActionId: 2 }
]

userScopeIdArray3:
[
    { Id: 15, userRoleId: 3, userResourceId: 2, userActionId: 2 },
    { Id: 16, userRoleId: 4, userResourceId: 2, userActionId: 2,}
]
Moon
  • 790
  • 1
  • 8
  • 19

2 Answers2

2

You could do with Array#reduce

const arr = [ { Id: 14, userRoleId: 2, userResourceId: 2, userActionId: 2, userScopeId: 2, }, { Id: 15, userRoleId: 3, userResourceId: 2, userActionId: 2, userScopeId: 3, }, { Id: 16, userRoleId: 4, userResourceId: 2, userActionId: 2, userScopeId: 3, }, { Id: 17, userRoleId: 5, userResourceId: 2, userActionId: 2, userScopeId: 1, } ];

let res = arr.reduce((acc,cur)=>{
    let id = 'userScopeId'+cur['userScopeId'];
    acc[id] = acc[id]||[];
    acc[id].push(cur);
    return acc;
},{});

console.log(res)
prasanth
  • 22,145
  • 4
  • 29
  • 53
1

You can use reduce array method to build this result.

let input = [
    {
        Id: 14,
        userRoleId: 2,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 2,
    },
    {
        Id: 15,
        userRoleId: 3,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 3,
    },
    {
        Id: 16,
        userRoleId: 4,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 3,
    },
    {
        Id: 17,
        userRoleId: 5,
        userResourceId: 2,
        userActionId: 2,
        userScopeId: 1,
    }
];

let output = input.reduce((acc, val) => {
  let key = "userScopeIdArray" + val.userScopeId;
  if(acc[key]){
    acc[key].push(val);
  } else{
    acc[key] = [val];
  }
  return acc;
}, {});

console.log(output);
Ran Marciano
  • 1,431
  • 5
  • 13
  • 30