Tengo una variedad de objetos.
myArray = [{a:1,b:1,c:1,d:1},{a:2,b:2,c:2,d:2},{a:3,b:3,c:3,d:3},{a:4,b:4,c:4,d:4}]
Quiero crear un nuevo diccionario a partir de él: newDict = {a:[1,2,3,4],c:[1,2,3,4]}
Soy totalmente nuevo en Javascript y Node.js Cualquier tipo de ayuda es muy apreciada. Gracias por adelantado.
Básicamente quieres agrupar algo. Para agrupar, generalmente puede usar .reduce()
En cada iteración, itera sobre las entradas de su objeto con Object.entries() y luego siempre verifica si su valor anterior ya tiene esa clave, si es así, lo presiona, si no, crea una nueva matriz y coloca su valor dentro de eso.
let myArray = [{a:1,b:1,c:1,d:1},{a:2,b:2,c:2,d:2},{a:3,b:3,c:3,d:3},{a:4,b:4,c:4,d:4}] let result = myArray.reduce((prev, curr) => { Object.entries(curr).forEach(([key, value]) => { if(prev[key]) { prev[key].push(value) } else { prev[key] = [value] } }) return prev; }, {}) console.log(result);Alternativamente, también puede hacerlo en un bucle for, en caso de que no esté familiarizado con el método de reducción.
const myArray = [{a:1,b:1,c:1,d:1},{a:2,b:2,c:2,d:2},{a:3,b:3,c:3,d:3},{a:4,b:4,c:4,d:4}] const wantedProperties = ['a', 'b', 'd'] const mydict = {} for (const item of myArray) { for (const [key, value] of Object.entries(item)) { if (wantedProperties.includes(key)) { mydict[key] = (mydict[key] || []).concat(value) } } } console.log(mydict)let targetArray = [{a:1,b:1,c:1,d:1},{a:2,b:2,c:2,d:2},{a:3,b:3,c:3,d:3},{a:4,b:4,c:4,d:4}] let result = targetArray.reduce((accc, curr) => { Object.entries(curr).forEach(([key, value]) => { if(!accc[key]) { accc[key] = [value] } else { accc[key].push(value) } }) return accc; }, {}) console.log(result);