-5

I have an array of objects as

const arr =   [
    
        {
            "id": 2,
            "key": "cc_edit"
        },
        {
            "id": 4,
            "key": "cc_upload"
        },
        {
            "id": 4,
            "key": "cc_download"
        },
        {
            "id": 1,
            "key": "cc_project"
        }]

I want a object with unique key as key of new object and its values as array. Something like:

{
   2 : ["cc_edit"],
   4 : ["cc_upload", "cc_download"],
   1 : ["cc_project"],
},

How it can be achieved?

n3018
  • 121
  • 2
  • 10

2 Answers2

2

Using Array#reduce:

const arr = [ { "id": 2, "key": "cc_edit" }, { "id": 4, "key": "cc_upload" }, { "id": 4, "key": "cc_download" }, { "id": 1, "key": "cc_project" } ];

const res = arr.reduce((acc, { id, key }) => ({
  ...acc,
  [id]: [...(acc[id] ?? []), key]
}), {});

console.log(res);
Majed Badawi
  • 27,616
  • 4
  • 25
  • 48
1

You can use the reduce function to achieve what you want.

const arr = [

  {
    "id": 2,
    "key": "cc_edit"
  },
  {
    "id": 4,
    "key": "cc_upload"
  },
  {
    "id": 4,
    "key": "cc_download"
  },
  {
    "id": 1,
    "key": "cc_project"
  }
]

const reducedArr = arr.reduce((acc, curr) => {
  const [key, value] = [curr.id, curr.key]
  
  if(key in acc){
    acc[key].push(value)
  } else {
    acc[key] = [value]
  }
  
  return acc
}, {})

console.log(reducedArr)
RenaudC5
  • 3,553
  • 1
  • 11
  • 29