-1

Attaching the input and output formats. `

//Input
[{"id":"146","catId":"25"},
{"id":"200","catId":"25"},
{"id":"250","catId":"55"}];
//Output expected
[{"catId":"25","topicIds":["146","200"]},
{"catId":"55","topicIds":["250"]}];

`

anto clinton
  • 87
  • 1
  • 7
  • Does this answer your question? [merge an array of objects where one property is the same, while transferring the unique values of another property into an array](https://stackoverflow.com/questions/69591078/merge-an-array-of-objects-where-one-property-is-the-same-while-transferring-the) – pilchard Mar 27 '22 at 14:53

1 Answers1

0

reduce can be used for grouping problems. Here I'm grouping by catId and it will return a grouped object

{
  25: {
    catId: "25",
    topicIds: ["146", "200"]
  },
  55: {
    catId: "55",
    topicIds: ["250"]
  }
}

Then to get the values array use Object.values

let a = [{"id":"146","catId":"25"},
{"id":"200","catId":"25"},
{"id":"250","catId":"55"}];

let res = Object.values(a.reduce((acc,{id,catId}) => {
    acc[catId] = acc[catId] || {catId,topicIds:[]}
  acc[catId].topicIds.push(id)
  return acc
},{}))

console.log(res)
cmgchess
  • 7,996
  • 37
  • 44
  • 62