I would like to display the value 122 of amount but I don't know how to do that.
I have this value
const products = [
{
id: 1,
productM: [
{
product: {
productId: 1222,
price: {
currency: 'EUR',
amount: 122,
},
},
},
],
label: 'corner-1',
sourceId: 23333,
},
]
I tried this function but it's not working and I don't know how to do that
function getTotalPrice(products) {
const arr = products.map((product) =>
product.productM.map((p) => p.price.amount)
);
return arr.reduce(
(accumulator, product) => accumulator product,
0
);
}
If anyone can help, many thanks
CodePudding user response:
I think this will work, you assumed that p was product but in reality p is the whole object, try this:
function getTotalPrice(products) {
const arr = products.map((product) =>
product.productM.reduce(
(total, { product }) => total product.price.amount,
0
)
);
return arr.reduce((accumulator, product) => accumulator product, 0);
}
ProductM is an array so I changed it from map to a reduce, to sum all the productsM prices in it
CodePudding user response:
Instead of map and reduce. You can use reduce only.
Since products is nested one more level, you can use reduce twice to get it done.
Try like this.
function getTotalPrice(products) {
return products.reduce((prev, curr) => {
return (
prev
curr.productM.reduce((innerPrev, innerCurr) => {
return innerPrev innerCurr.product.price.amount;
}, 0)
);
}, 0);
}
CodePudding user response:
You don't need to map anything, you can reduce directly over the original array:
function getTotalPrice(products) {
return products.reduce((acc, p) => acc p.productM.product.price.amount, 0);
}
