Dado un objeto de esta estructura
{ "1": { "data": { "a": 100, "z": 100, "e": 50 }, "percentage": { "a": 10, "z": 10, "e": 41.09 } }, "2": { "data": { "a": 10, "z": 10, "e": 20 }, "percentage": { "a": 30, "z": 40, "e": 50 } } }quiero sumar los valores de este objeto para obtener esta estructura similar
{ "data": { "a": sum(a), "z": sum(z), "e": sum(e) }, "percentage": { "a": sum(a)/numberOfelements, "z": sum(z)/numberOfelements, "e": sum(e)/numberOfelements } }Como recién comencé a aprender js, me resulta difícil implementar la suma dentro de este mapa
Object.keys(filtered).map(key => ({ data: data[key].data, percentage: data[key].percentage, }))Cualquier ayuda será bien recibida
Si numOfElemements significó elementos en el objeto de datos, entonces la implementación actual servirá. De lo contrario, descomente las líneas comentadas existentes y comente la línea después de la última línea comentada. Que considera elementos en el objeto de datos.
const obj = { 1: { data: { a: 100, z: 100, e: 50, }, }, 2: { data: { a: 10, z: 10, e: 20, }, }, }; function groupBySum(obj) { let data = {}; let percentage = {}; // let numberOfElements = 0; for (let i in obj) { // numberOfElements += 1; for (let j in obj[i].data) { if (data[j] === undefined) { data[j] = obj[i].data[j]; } else { data[j] += obj[i].data[j]; } } } for (let i in data) { // percentage[i] = data[i] / numberOfElements; percentage[i] = data[i] / Object.keys(data).length; } return { data, percentage, }; } console.log(groupBySum(obj));También será una buena idea cambiar su estructura actual al formato de matriz como se muestra a continuación.
const obj = [ { data: { a: 100, z: 100, e: 50, }, percentage: { a: 10, z: 10, e: 41.09, }, }, { data: { a: 10, z: 10, e: 20, }, percentage: { a: 30, z: 40, e: 50, }, }, ];