Estoy tratando de recorrer una matriz y sumar valores para cada Departamento en la matriz. Vea abajo. Estoy tratando de recorrer los objetos y agregar todos los valores de dinero (sumarlos) por departamento.
var awards = [ { Department: "AL", Money: 100 }, { Department: "AL", Money: 100 }, { Department: "OB", Money: 200 }, { Department: "AL", Money: 100 }, { Department: "OB", Money: 200 } ]; var myObj = {}, array1 = [], sum = 0, array2 = [], myObj2 = {}; var activeDepartments = ["AL", "OB"]; //FOREACH Object.keys(awards).forEach(function(key, index) { var department = awards[key].Department; var money = awards[key].Money; sum = 0; // console.log(this[index].Money); if (activeDepartments.indexOf(department) !== -1) { sum += this[index].Money; myObj[department] = sum; } //console.log(index); }, awards); array1.push(myObj); //PUSH OBJECT TO ARRAY console.log(array1); //trying to get object to look like this: [{AL:300}, {OB:400}]En lugar de sum = 0 , necesita sum = myObj[department] ?? 0; . De esta forma, no reenvías la suma en cada iteración del ciclo. Lo que hace esa línea de código es verificar si la expresión a la izquierda de ?? ( myObj[department] ) está definido. Si lo es, asigna su valor a sum. De lo contrario, asigna el valor de la expresión a la derecha de ?? .
Ya se ha resuelto una pregunta similar en Sumar claves similares en una matriz de objetos
en tu caso el código se vería así
var awards = [ { Department: "AL", Money: 100 }, { Department: "AL", Money: 100 }, { Department: "OB", Money: 200 }, { Department: "AL", Money: 100 }, { Department: "OB", Money: 200 } ]; var holder = {}; awards.forEach(function(award) { if (holder.hasOwnProperty(award.Department)) { holder[award.Department] = holder[award.Department] + award.Money; } else { holder[award.Department] = award.Money; } }); var finalArray = []; for (var prop in holder) { finalArray.push( {[prop]: holder[prop]} ); } console.log(finalArray);