我在对象数组中有一个数组,我想对嵌套数组中的值求和。
[{BenefitType:'401k',
Beneficiaries: [{Name: 'PersonA', Percentage: 20},
{Name: 'PersonB', Percentage: 30},
{Name: 'PersonC', Percentage: 50}]
},
{BenefitType:'IRA',
Beneficiaries: [{Name: 'PersonA', Percentage: 15},
{Name: 'PersonB', Percentage: 45},
{Name: 'PersonC', Percentage: 40}]
}];
我想按福利类型对所有百分比进行求和,以便 401k = 100
和 IRA = 100
。
我有以下代码,但它为我提供了百分比总计,而不是每种福利类型的总计:
var myTotal = 0;
for(var i = 0; i < data.benefit_type.length; i++) {
for(var j=0; j < data.benefit_type[i].beneficiaries.length; j++) {
myTotal += parseInt(data.benefit_type[i].beneficiaries[j].percentage);
data.benefit_type[i].percent_total = myTotal;
}
}
我缺少什么来解决这个问题?
最佳答案
您可以使用 .forEach()
迭代所有对象,并使用 .reduce()
对内部数组求和:
let array = [{BenefitType:'401k',
Beneficiaries: [{Name: 'PersonA', Percentage: 20},
{Name: 'PersonB', Percentage: 30},
{Name: 'PersonC', Percentage: 50}]
},
{BenefitType:'IRA',
Beneficiaries: [{Name: 'PersonA', Percentage: 15},
{Name: 'PersonB', Percentage: 45},
{Name: 'PersonC', Percentage: 40}]
}];
array.forEach(x => x.TotalPercentage = x.Beneficiaries.reduce((val, cur) => val + cur.Percentage, 0));
console.log(array);
编辑:
要使用双 for 循环修复代码,您应该在离开内部循环时将 myTotal
变量设置为零:
for(var i = 0; i < data.benefit_type.length; i++) {
for(var j=0; j < data.benefit_type[i].Beneficiaries.length; j++) {
myTotal += data.benefit_type[i].Beneficiaries[j].Percentage;
data.benefit_type[i].percent_total = myTotal;
}
myTotal = 0;
}
关于javascript - 嵌套数组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768119/