@Aleksilla

Как слелать функцию подсчета?

Данные

const salaries = {
}
const team = [
]


Нужна функция которая вернет сумму зарплато по всем специальностям и общюю сумму зарплат тоже

Upd: что у меня выходит

const financeReport = calculateTeamFinanceReport(salaries, team)

function calculateTeamFinanceReport (salaries, team) {
let totalBudgetProgger = 0;
let totalBudgetTester = 0;
let totalBudgetTeam = totalBudgetProgger + totalBudgetTester;
if (team.specialization === "Progger") {
totalBudgetTeam = totalBudgetTeam + 1000 * 15%
},
if (team.specialization === "tester") {
totalBudgetTester = totalBudgetTester + 1000 * 10%,
}

const financeReport = {
totalBudgetTeam
totalBudgetProgger,
totalBudgetTester
}

}
console.log(JSON.stringify(financeReport))
  • Вопрос задан
  • 284 просмотра
Решения вопроса 1
morsa
@morsa
Frontend-разработчик
Привет!

Если я правильно понял задачу, то вот:
const calculateTeamFinanceReport = (salaries, team) => {
  const res = { sumAllSalary: 0 };

  for (const employee of team) {
    if (!res.hasOwnProperty(employee.specialization)) {
      res[employee.specialization] = salaries[employee.specialization].salary;
    } else {
      res[employee.specialization] += salaries[employee.specialization].salary;
    }
    res.sumAllSalary += salaries[employee.specialization].salary;
  }

  return res;
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Пройтись по участникам команды, собирая объект, где ключи – названия профессий, значения – аккумулирующиеся суммы затрат на соотв. профессию. Типа, { 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
Ответ написан
Комментировать
@skreeauk
Без parseFloat:

const calculateTeamFinanceReport = (salaries, team) =>
  team.reduce(
    (acc, cur) => {
      const total = Math.round(
        salaries[cur.specialization]?.salary *
          +`1.${salaries[cur.specialization]?.tax.replace("%", "")}`
      );

      if (!total) return acc;

      acc[`totalBudget$${cur.specialization}`] = !acc.hasOwnProperty(
        `totalBudget${cur.specialization}`
      )
        ? total
        : (acc[`totalBudget${cur.specialization}`] += total);

      acc.totalBudgetTeam += total;
      return acc;
    },
    { totalBudgetTeam: 0 }
  );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект
21 нояб. 2024, в 21:30
500 руб./за проект