Tenía un objeto que contenía objetos, cada uno de los cuales tenía una matriz de objetos con 0..n objetos. El objeto principal se veía así:
{ obj1: [{obj1.1}, {obj1.2}, {obj1.3}], obj2: [{obj2.1}] obj3: [{obj3.1}, {obj3.2}] }Cada objeto (obj1, obj2 y obj3) contenía un grupo de objetos comunes en una matriz de objetos. Por ejemplo, obj1 tiene un grupo de objetos en una matriz de objetos (obj1.1, obj1.2 y obj1.3), todos los cuales tienen una propiedad común que los agrupa.
Ahora quiero poder iterar sobre cada objeto por separado en cada matriz de objetos para sumar una propiedad particular (que tiene cada objeto) para cada matriz de objetos.
He usado Object.keys para iterar sobre cada matriz de objetos, aunque todavía no puedo obtener un valor sumado separado por matriz de objetos.
Por ejemplo:
{ obj1: [ 0: { price: 10 } 1: { price: 10 } 2: { price: 10 } ], obj2: [ 0: { price: 10 } ], obj3: [ 0: { price: 10 } 1: { price: 10 } ] } Quiero poder sumar el price de la propiedad para cada conjunto de objetos individuales. Por lo tanto, para obj1 debería tener una cantidad total de 30. Para obj2 debería tener una cantidad total de 10 y, por último, para obj3 debería tener una cantidad total de 20.
Puedo iterar sobre cada matriz de objetos usando Object.keys , sin embargo, tal como está ahora, al iterar sobre cada elemento individual en cada matriz de objetos (usando un foreach), solo estoy sumando una cantidad final para todos los objetos en las tres matrices de objetos. Es decir, obtengo una cantidad total de 60.
var total = 0; for (var key of Object.keys(result)) { result[key].forEach(element => { total += element.Price; }); }; console.log(total);¿Qué podría usar para obtener las tres cantidades sumadas individualmente por matriz de objetos?
function sum(prices) { let total = 0; prices.forEach((entry) => total += entry.price); return total; } console.log(sum(obj1)); console.log(sum(obj2)); console.log(sum(obj3));¿Por qué fue tan difícil de nuevo? Tenías el código correcto, solo necesitabas descifrar las cosas.
Object#entries , obtenga los pares de matriz de clavesArray#reduce , itere sobre esta listaArray#reduce , puede calcular el precio total y guardarlo como valor para la clave actual const data = { obj1: [ { price: 10 }, { price: 10 }, { price: 10 } ], obj2: [ { price: 10 } ], obj3: [ { price: 10 }, { price: 10 } ] }; const res = Object.entries(data).reduce((totalMap, [key, arr]) => ({ ...totalMap, [key]: arr.reduce((total, { price }) => total + price, 0) }), {}); console.log(res);sin embargo, aquí hay otra forma de obtener el resultado como una matriz:
let obj={obj1:[{price:10},{price:10},{price:10}],obj2:[{price:10}],obj3:[{price:10},{price:10}]}; let result = Object.entries(obj) .map(([k,v]) => ( {[k]:v.reduce((acc,e) => acc+=e.price ,0)} ) ) console.log(result)