【问题标题】:Sum nested array求和嵌套数组
【发布时间】:2018-06-08 20:40:54
【问题描述】:

我在对象数组中有一个数组,我想对嵌套数组中的值求和。

[{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;

    } 
}

我缺少什么来解决这个问题?

【问题讨论】:

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以使用.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;
}

【讨论】:

  • 为什么一定要使用map和reduce?为什么不直接减少?
  • @CoryKleiser 你是对的,我已经根据 OP 试图实现的目标修改并简化了我的答案
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 2016-09-17
  • 2021-03-29
  • 2020-09-25
  • 2014-01-11
  • 1970-01-01
  • 2014-01-28
  • 2013-09-22
相关资源
最近更新 更多