Tengo una matriz que se parece a esta: la matriz de objetos es mucho más grande y cada objeto tiene más propiedades, sin embargo, esta es la estructura.
let arr = [ { id: 1, name: "tony", hatColor: "blue" }, { id: 2, name: "larry", hatColor: "red" }, { id: 3, name: "stuart", hatColor: "green" }, ];Quiero crear una matriz para cada clave en esta matriz, así que tengo una matriz con todos los identificadores, una matriz con todos los nombres y una con todos los hatColors.
idArr = [1, 2, 3]; nameArr = [tony, larry, stuart]; hatColorArr = [blue, red, green];No sabré exactamente cómo se ve la matriz de objetos cuando se devuelve desde otro script.
Lo que he probado es:
for (var [key, value] of Object.entries(arr)) { for (var [key, value] of Object.entries(value)) { var result = arr.map(({ key }) => key); console.log(result); } }Esto devuelve una matriz de indefinidos. Espero que haya una manera de hacer esto, no quiero escribir muchas declaraciones if push codificadas para que esto funcione.
Gracias.
Puede usar Array.map para extraer los valores de propiedad de cada elemento de la matriz.
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}]; function groupPropValues(objs, prop){ return objs.map(e => e[prop]) } idArr = groupPropValues(arr, 'id'); nameArr = groupPropValues(arr, 'name'); hatColorArr = groupPropValues(arr, 'hatColor'); console.log(idArr, nameArr, hatColorArr)Si desea generar matrices automáticamente, puede hacerlo obteniendo las propiedades de cada objeto en la matriz, luego recuperando los valores y almacenándolos en un objeto.
let arr=[{id:1,name:"tony",hatColor:"blue"},{id:2,name:"larry",hatColor:"red"},{id:3,name:"stuart",hatColor:"green"}]; function groupPropValues(objs, prop) { return objs.map(e => e[prop]) } const props = [...new Set(arr.reduce((a,b) => (a.push(Object.keys(b)), a), []).flat())] const result = props.reduce((a,b) => (a[b] = groupPropValues(arr, b), a), {}) console.log(result)