Tengo una matriz como:
const productInfo = [ { product: "NON_PROD", subProducts: [ { subProd: "SUBPROD1", }, ], }, { product: "PROD0", subProducts: [ { subProd: "SUBPROD2", }, { subProd: "SUBPROD3", }, ], }, { product: "PROD1", subProducts: [ { subProd: "SUBPROD4", }, ], }, { product: "PROD2", subProducts: [ { subProd: "SUBPROD5", }, { subProd: "SUBPROD6", }, ], }, ];Quiero obtener todos los valores de subProd en una matriz, excepto el producto NON_PROD y también si el producto es PROD0, debería devolver el producto, es decir, PROD0 y para otros, debería devolver todos los valores de subProd como:
subProdList = [PROD0,SUBPROD4,SUBPROD5,SUBPROD6]He probado este fragmento de código:
const list = productInfo.map((prod) => { if (prod.product === "PROD0") { return prod.product; } else { prod.subProducts.map((subProduct) => { return subProduct.subProd; }); } });pero no funciona
Repita los productos con un bucle y use el map cuando concatene las matrices internas con su matriz de salida.
const productInfo=[{product:"NON_PROD",subProducts:[{subProd:"SUBPROD1"}]},{product:"PROD0",subProducts:[{subProd:"SUBPROD2"},{subProd:"SUBPROD3"}]},{product:"PROD1",subProducts:[{subProd:"SUBPROD4"}]},{product:"PROD2",subProducts:[{subProd:"SUBPROD5"},{subProd:"SUBPROD6"}]}]; let out = []; for (const obj of productInfo) { const { product, subProducts } = obj; if (product !== 'NON_PROD') { if (product === 'PROD0') { out.push('PROD0'); } else { out = [...out, ...subProducts.map(p => p.subProd)]; } } } console.log(out); const productInfo = [ { product: "NON_PROD", subProducts: [ { subProd: "SUBPROD1", }, ], }, { product: "PROD0", subProducts: [ { subProd: "SUBPROD2", }, { subProd: "SUBPROD3", }, ], }, { product: "PROD1", subProducts: [ { subProd: "SUBPROD4", }, ], }, { product: "PROD2", subProducts: [ { subProd: "SUBPROD5", }, { subProd: "SUBPROD6", }, ], }, ]; const list = productInfo.filter(x=> x.product != "NON_PROD").flatMap((prod) => { let op = prod.subProducts.map((subProduct) => { return subProduct.subProd; }); if (prod.product === "PROD0") { op.push(prod.product); } return op; }); console.log(list);Empuje sus valores necesarios a una nueva variable dentro del mapa podría resolver esto
const productInfo = [ { product: "NON_PROD", subProducts: [ { subProd: "SUBPROD1", }, ], }, { product: "PROD0", subProducts: [ { subProd: "SUBPROD2", }, { subProd: "SUBPROD3", }, ], }, { product: "PROD1", subProducts: [ { subProd: "SUBPROD4", }, ], }, { product: "PROD2", subProducts: [ { subProd: "SUBPROD5", }, { subProd: "SUBPROD6", }, ], }, ]; let list = [] productInfo.forEach((prod) => { if(prod.product !== 'NON_PROD') { if (prod.product === "PROD0") { list.push(prod.product) } else { list = [...list, ...prod.subProducts.map((subProduct) => subProduct.subProd)]; } } }); console.log(list)