const products = { value: { phone: [], lamp: [], car: ["bmw", "toyota", "audi"] } }; En el objeto dado, quiero iterar y obtener keys .
Tenga en cuenta que los values son array of strings .
Me gustaría obtener todas las claves y si los valores no son matrices vacías, quiero combinarlas con claves y devolver una matriz con esta estructura
[ phone, lamp, car-bmw, car-toyota, car-audi ]Esto es lo que hice hasta ahora, que no es lo que quiero
const products = { value: { phone: [], lamp: [], car: ["bmw", "toyota", "audi"] } }; const mappedProducts = Object.entries(products.value).map(([value, items]) => { //console.log("value :", value, "items :", items) if (items.length > 0) { return { car: items.map((c) => c) }; } }); console.log(mappedProducts);Cualquier ayuda será apreciada.
Modifiqué un poco lo que hiciste, puedes flatMap
const products = { value: { phone: [], lamp: [], car: ["bmw", "toyota", "audi"] } }; const mappedProducts = Object.entries(products.value).flatMap(([value, items]) => { //console.log("value :", value, "items :", items) if (items.length > 0) { return items.map(item => `${value}-${item}`); } else { return [value]; } }); console.log(mappedProducts);Puedes usar for in bucle
const products = { value: { phone: [], lamp: [], car: ["bmw", "toyota", "audi"] } }; const newData = []; for (const key in products) { const value = products[key]; for (const innerKey in value) { const innerVal = value[innerKey]; if (innerVal.length > 0) { innerVal.forEach((item) => newData.push(`${innerKey}-${item}`)); } else { newData.push(innerKey); } } } console.log(newData);Otra solución sería usar Object.keys() junto con map y concat para obtener una matriz fusionada con claves y valores (si corresponde):
const products = { value: { phone: [], lamp: [], car: ["bmw", "toyota", "audi"] } }; let keys = [].concat.apply([], Object.keys(products.value).map((key) =>{ if(products.value[key].length > 0){ return products.value[key]; } else return key; })); console.log(keys);