Me gustaría mostrar el valor 122 de cantidad pero no sé cómo hacerlo.
tengo este valor
const products = [ { id: 1, productM: [ { product: { productId: 1222, price: { currency: 'EUR', amount: 122, }, }, }, ], label: 'corner-1', sourceId: 23333, }, ]Probé esta función pero no funciona y no sé cómo hacerlo
function getTotalPrice(products) { const arr = products.map((product) => product.productM.map((p) => p.price.amount) ); return arr.reduce( (accumulator, product) => accumulator + product, 0 ); }Si alguien puede ayudar, muchas gracias.
Creo que esto funcionará, asumiste que p era el producto pero en realidad p es el objeto completo, prueba esto:
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 es una matriz, así que la cambié de map a reduce, para sumar todos los precios de productsM en ella
En lugar de map y reduce . Puede usar reduce solamente.
Dado que los products están anidados en un nivel más, puede usar reduce dos veces para hacerlo.
Prueba así.
function getTotalPrice(products) { return products.reduce((prev, curr) => { return ( prev + curr.productM.reduce((innerPrev, innerCurr) => { return innerPrev + innerCurr.product.price.amount; }, 0) ); }, 0); }No necesita mapear nada, puede reducir directamente sobre la matriz original:
function getTotalPrice(products) { return products.reduce((acc, p) => acc + p.productM.product.price.amount, 0); }