I have an array as:
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",
},
],
},
];
I want to get all the subProd values in an array except for NON_PROD product and also if the product is PROD0 it should return the product i.e PROD0 and for others it should return all the subProd values like:
subProdList = [PROD0,SUBPROD4,SUBPROD5,SUBPROD6]
I have tried this piece of code:
const list = productInfo.map((prod) => {
if (prod.product === "PROD0") {
return prod.product;
} else {
prod.subProducts.map((subProduct) => {
return subProduct.subProd;
});
}
});
but its not working
Iterate over the products with a loop, and use map when you concatenate the inner arrays with your output array.
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);
Push your necessary values to a new variable inside map could solve this
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)