Estoy tratando de extraer y empujar los elementos de una matriz de objetos a un objeto vacío. Aquí está el ejemplo de las matrices.
const products = ["cars", "phones", "laptops"]; const productArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"], }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"], }, { laptops: ["Mac", "Dell", "HP", "Acer"], }, ]; const mappedProducts= products.map((_,i) => productArrayOfObj[i]);
Desde mappedProducts
devuelve esta estructura, aunque no estoy seguro de si esta es la forma correcta de mapear esto.
[ { cars: [ 'Ford', 'Chevy', 'Honda', 'Toyota' ] }, { phones: [ 'iPhone', 'Samsung', 'Nokia', 'Sony' ] }, { laptops: [ 'Mac', 'Dell', 'HP', 'Acer' ] } ]
Mi matriz deseada se vería así
[ 'Ford', 'Chevy', 'Honda', 'Toyota','iPhone', 'Samsung', 'Nokia', 'Sony','Mac', 'Dell', 'HP', 'Acer' ]
La forma en que estoy tratando de implementarlo, devuelve un resultado incorrecto.
const arrayToPush = [] const getArrayEl = mappedProducts && mappedProducts.map(item => { for(let key in item){ arrayToPush.push(item[key]) } return arrayToPush })
Cualquier ayuda será apreciada
const names = ["cars", "phones", "laptops"]; const nameArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"], }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"], }, { laptops: ["Mac", "Dell", "HP", "Acer"], }, ]; const mappedProducts = names && nameArrayOfObj && names.map((_,i) => nameArrayOfObj[i]); console.log("mappedProducts", mappedProducts); const arrayToPush = [] const getArrayEl = mappedProducts && mappedProducts.map(item => { for(let key in item){ arrayToPush.push(item[key]) } return arrayToPush }) console.log("getArrayEl", getArrayEl);
Puede usar dos llamadas .flatMap()
para recorrer su matriz de objetos de productos y luego una interna para recorrer sus name
de la matriz de products
. Para cada name
, puede tomar la matriz asociada del objeto en ese nombre:
const products = ["cars", "phones", "laptops"]; const productArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"], }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"], }, { laptops: ["Mac", "Dell", "HP", "Acer"], }, ]; const res = productArrayOfObj.flatMap(obj => products.flatMap( name => obj[name] ?? [] )); console.log(res);
Si sus objetos solo pueden contener un par de matriz de claves, entonces puede cambiar su .flatMap()
interno a un .find()
para encontrar la clave que se usa en el objeto:
const products = ["cars", "phones", "laptops"]; const productArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"], }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"], }, { laptops: ["Mac", "Dell", "HP", "Acer"], }, ]; const res = productArrayOfObj.flatMap(obj => { const key = products.find(name => obj.hasOwnProperty(name)); return key ? obj[key] : []; }); console.log(res);
Implementación Array.flatMap
.
Lógica
names
con Array.flatMap
.nameArrayOfObj
.Esta implementación hace uso de un supuesto de que ambas matrices están en el mismo orden.
violín de trabajo
const names = ["cars", "phones", "laptops"]; const nameArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"] }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"] }, { laptops: ["Mac", "Dell", "HP", "Acer"] }, ]; const mappedProducts = names.flatMap((name, i) => nameArrayOfObj[i][name] ? nameArrayOfObj[i][name] : []); console.log(mappedProducts);
Si no puede garantizar que las matrices estén en el mismo orden, puede utilizar esta lógica.
names
Array.nameArrayOfObj
con la clave en names
Array.violín de trabajo
const names = ["cars", "phones", "laptops"]; const nameArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"] }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"] }, { laptops: ["Mac", "Dell", "HP", "Acer"] }, ]; const mappedProducts = names.flatMap((name, i) => { const matchingNode = nameArrayOfObj.find(item => item.hasOwnProperty(name)); return matchingNode ? matchingNode[name] : []; }); console.log(mappedProducts);
¿Es esta tu solución? Usando las claves de products
y flatMap()
const products = ["cars", "phones", "laptops"]; const productArrayOfObj = [ { cars: ["Ford", "Chevy", "Honda", "Toyota"], }, { phones: ["iPhone", "Samsung", "Nokia", "Sony"], }, { laptops: ["Mac", "Dell", "HP", "Acer"], }, ]; const mappedProducts= products.flatMap((_,i) => productArrayOfObj[i][_]); console.log(mappedProducts)