在ForEach Using Keys Javascript中为自身添加值



我正试图循环遍历一个数组,并对数组中每个Department的值求和。请参见下文。我试图循环浏览这些对象,并将每个部门的所有Money值相加(求和(。

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}]

您需要的不是sum = 0,而是sum = myObj[department] ?? 0;。这样,就不会在循环的每次迭代中重新发送总和。这行代码所做的是检查是否定义了??(myObj[department](左侧的表达式。如果是,则将其值指定为sum。否则,它会将表达式的值指定给??的右侧。

相似的问题已经在对象数组中的相似键求和中得到解决

在你的情况下,代码看起来像这个

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);

最新更新