javascript - 嵌套数组求和

标签 javascript arrays multidimensional-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}]
}];

我想按福利类型对所有百分比进行求和,以便 401k = 100IRA = 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/

相关文章:

javascript - 从不同的页面访问打开的窗口

javascript - 是否可以执行 "if .. || if .."?

javascript - 使用 JavaScript 将复选框值传递到数据库

javascript - 逐行读取本地文本标题,将行存储在数组中

java构建多维数组,其中的单元格是数组列表

javascript - 填充二维数组 "line by line"JavaScript/NodeJS

javascript - 如何将具有相同属性值的对象值推送到 Javascript 中的同一个子数组?

c++ - 如何在 C++ 中将多维数组传递给没有内部维度的函数?

javascript - 嵌套在for循环中的函数中的局部变量

Javascript 扫雷游戏,无法增加正确的单元格