¿Cuál es la mejor manera de convertir a la siguiente matriz? ¿Necesito mapearlo o hay alguna otra forma con Object.values, etc.?
[ { key: "eyeColor", value: "Blue/Green", }, { key: "eyeColor", value: "Blue", }, { key: "hairColor", value: "black", } ];dentro:
{ hairColor: ["Blond", "Brown"], eyeColor: ["Blue"], }Array#reduce , itere sobre la matriz mientras actualiza un Map donde la key son las propiedades clave y el value son las propiedades de valor agrupado correspondientes.Array#map , itere sobre los pares anteriores y conviértalos en objetos: const data = [ { key: "eyeColor", value: "Blue/Green" }, { key: "eyeColor", value: "Blue" }, { key: "hairColor", value: "black" } ]; const groupedPairs = [...data.reduce((map, { key, value }) => map.set(key, [...(map.get(key) ?? []), value]), new Map)]; const list = groupedPairs.map(([ prop, list ]) => ({ [prop]: list })) console.log(list);EDITAR DESPUÉS DEL CAMBIO DE SALIDA ESPERADA:
const data = [ { key: "eyeColor", value: "Blue/Green" }, { key: "eyeColor", value: "Blue" }, { key: "hairColor", value: "black" } ]; const res = data.reduce((acc, { key, value }) => ({ ...acc, [key]: [...(acc[key] ?? []), value] }), {}); console.log(res);