Сумма вложенного массива - PullRequest
0 голосов
/ 08 июня 2018

У меня есть массив в массиве объектов, и я хочу суммировать значения во вложенном массиве.

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

    } 
}

Что мне не хватает, чтобы это исправить?

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать .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);

РЕДАКТИРОВАТЬ:

Чтобы исправить ваш код с двойным для цикла, вы должны установить переменную 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...