Adjuntar los formatos de entrada y salida. `
//Input [{"id":"146","catId":"25"}, {"id":"200","catId":"25"}, {"id":"250","catId":"55"}]; //Output expected [{"catId":"25","topicIds":["146","200"]}, {"catId":"55","topicIds":["250"]}];`
reduce se puede utilizar para agrupar problemas. Aquí estoy agrupando por catId y devolverá un objeto agrupado
{ 25: { catId: "25", topicIds: ["146", "200"] }, 55: { catId: "55", topicIds: ["250"] } } Luego, para obtener la matriz de valores, 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)