Necesito sumar todo el 'precio' dentro del atributo de matriz de productos en función de la identificación dentro del atributo 'fromSuppliers'. ¿Cuál sería la mejor manera de hacer eso? Lo intenté con map y reduce pero no tuve éxito. Cualquier ayuda será apreciada.
el resultado esperado para este ejemplo:
[ { id: 1, totalPrice: 19,84 } { id: 2, totalPrice: 9.84 } ]el objeto:
const Jsonresult = { items: { '**9089**': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 16, }, '**id**': 2 } }], total: 9.84, quantity: 1, price: '**9.84**', updatedAt: '2021-02-11T17:25:22.960-03:00' }, '**9090**': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, '**id**': 1 } }], total: 9.84, quantity: 1, '**price**': 9.84, updatedAt: '2021-02-11T17:25:22.960-03:00' }, '**9091**': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, '**id**': 1 } }], total: 9.84, quantity: 1, '**price**': 10, updatedAt: '2021-02-11T17:25:22.960-03:00' }, }Puede usar Object.values() para obtener una matriz de sus items . Luego Array.reduce() para crear un objeto de mapa, ingresado en id . Usaríamos Object.values una vez más para convertir nuestro objeto de mapa en una matriz.
const Jsonresult = { items: { '9089': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 16, }, id: 2 } }], total: 9.84, quantity: 1, price: 9.84, updatedAt: '2021-02-11T17:25:22.960-03:00' }, '9090': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, id: 1 } }], total: 9.84, quantity: 1, price: 9.84, updatedAt: '2021-02-11T17:25:22.960-03:00' }, '9091': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, id: 1 } }], total: 9.84, quantity: 1, price: 10, updatedAt: '2021-02-11T17:25:22.960-03:00' }, } }; const items = Object.values(Jsonresult.items); const result = Object.values(items.reduce((acc, { price, product: [ { fromSuppliers: { id }} ]}) => { if (!acc[id]) acc[id] = { id, price: 0 }; acc[id].price += price; return acc; }, {})); console.log(result) .as-console-wrapper { max-height: 100% !important; top: 0; }