tengo una matriz
const countries = [{ name: "Angola", region: "Africa" }, { name: "Spain", region: "Europe" }, { name: "Italy", region: "Europe" }]Necesito que el resultado sea:
const result = { Europe: [{ name: "Spain" }, { name: "italy" }], Africa: [{ name: "Angola" }] }He intentado 2 enfoques:
const result = countries.reduce((acc, { name, region }) => { acc[region] = [...acc[region], { name }] return acc }, {}) const result = countries.reduce((acc, { name, region }) => { return { ...acc, [region]: [...acc[region], { name }] } }, {})Ninguno de ellos funciona porque no pude encontrar una manera de distribuir los elementos existentes en la matriz, que en una primera iteración es obviamente nulo.
Gracias
De repente encontré la solución a mi problema.
const result = countries.reduce((acc, { name, region }) => { return { ...(acc || {}), [region]: [...(acc[region] || []), { name }] } }, {})Puede resolver el problema definiendo acc[region]
const result = countries.reduce((acc, { name, region }) => { if (!acc[region]) acc[region] = []; acc[region] = [...acc[region], { name }] return acc }, {})