Tengo una matriz de objetos y luego dentro de cada objeto tengo otra matriz, quiero agrupar los datos dentro de la matriz de objetos según su nombre de categoría. Intenté hacerlo con una función de reducción, pero básicamente me está dando los mismos datos (ni siquiera se transforma), es como si ni siquiera estuviera llamando.
Mis datos
data = [ { name: "listName", id:434343, data: [ { id:434343, categoryName: school, }, { id:234343, categoryName: house, }, { id:2000, categoryName: school, }, { id:2333, categoryName: house, } ] }, { name: "anotherListName", id:434343, data: [ { id:434343, categoryName: school, }, { id:234343, categoryName: house, }, { id:2000, categoryName: school, }, { id:2333, categoryName: house, } ] } ]mi código
list.forEach(d => d.data.reduce((acc, currrent) => { (acc[currrent.categoryName] = acc[currrent.categoryName] || []).push( currrent ) return acc }, {}) )Cómo quiero que se transformen los datos
transformed = [ { name: "listName", id:43453, data: { school: [ { id:434343, categoryName:school }, { id:2000, categoryName:school }, ], house: [ { id:234343, categoryName:house }, { id:2333, categoryName:house }, ], } }, { name: "listName", id:43453, data: { school: [ { id:434343, categoryName:school }, { id:2000, categoryName:school }, ], house: [ { id:234343, categoryName:house }, { id:2333, categoryName:house }, ], } }, ]puedes hacer algo como esto usando map y reduce
const transform = data => data.map(({name, id, data}) => { return { name, id, data: data.reduce((res, {id, categoryName}) => { return { ...res, [categoryName]: [...(res[categoryName] || []), {id, categoryName }] } }, {}) } }) const data = [{ name: "listName", id: 434343, data: [{ id: 434343, categoryName: 'school', }, { id: 234343, categoryName: 'house', }, { id: 2000, categoryName: 'school', }, { id: 2333, categoryName: 'house', } ] }, { name: "anotherListName", id: 434343, data: [{ id: 434343, categoryName: 'school', }, { id: 234343, categoryName: 'house', }, { id: 2000, categoryName: 'school', }, { id: 2333, categoryName: 'house', } ] } ] const result = transform(data) console.log(result)