我试图通过一个数组循环,并对数组中的每个部门进行求和。见下文。我试图循环遍历对象,并将每个部门的所有货币值(和值)相加。
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}]
发布于 2022-02-04 17:12:43
而不是sum = 0,您需要sum = myObj[department] ?? 0;。这样,您就不会重新发送循环每次迭代的和。这一行代码所做的是检查是否定义了?? (myObj[department])左侧的表达式。如果是,则将其值赋值为求和。否则,它将表达式的值赋给??的右侧。
发布于 2022-02-04 17:24:20
相似的问题已经在Sum similar keys in an array of objects中解决了
在您的例子中,代码将如下所示
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);
https://stackoverflow.com/questions/70989319
复制相似问题