Пройтись по участникам команды, собирая объект, где ключи – названия профессий, значения – аккумулирующиеся суммы затрат на соотв. профессию. Типа,
{ Progger: 100, Tester: 200 }
Затем остаётся только сложить значения всех свойств этого объекта для тотала по всей комманде, и переименовать ключи, дописав в начале им "totalBudget":
const calculateTeamFinanceReport = (salaries, team) => {
const bySpec = team.reduce((acc, { specialization: spec }) => {
if (!Object.hasOwn(acc, spec)) acc[spec] = 0;
const { salary, tax } = salaries[spec];
const k = 1 + parseFloat(tax) / 100;
acc[spec] += salary * k;
return acc;
}, {});
const totalBudgetTeam = Object.values(bySpec).reduce((acc, c) => acc + c);
const result = Object.fromEntries(Object.entries(bySpec).map(([key, value]) => ['totalBudget' + key, value]));
return { totalBudgetTeam, ...result };
};
calculateTeamFinanceReport(salaries, team);
// { totalBudgetTeam: 3350, totalBudgetProgger: 1150, totalBudgetTester: 2200 }
Для разбора процентов удобна функция
parseFloat()
– она читает цифры с начала строки, сколько может. И игнорирует буквы после.
parseFloat('15.5%') === 15.5