@annaozi

Как суммировать значения всех свойств объекта, не перечисляя каждое?

Как переписать total обькта salaries,
чтобы вне зависимости от количества сотрудников, он имел возможность считать зп всех людей?
const salaries = {
  frontend: 12000,
  backend: 10000,
  designer: 8000,
  dayPay() {
    alert('We must pay salary on Tuesday!');
  },
  total() {
    let sum = this.frontend + this.backend + this.designer;
    console.log(sum);
  }
};

salaries.total(); // 3000

salaries.manager = 5000;
salaries.total(); // 35000
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@Vancho84
Нужно отделить данные о ЗП от методов, например:
total() {
    let sum = Object.values(this)
      .filter((prop) => {
        return typeof prop !== "function";
      })
      .reduce((acc, emp) => {
        return (acc = acc + emp);
      }, 0);
    console.log(sum);
  },
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@marselo777
React developer
Можно переписать в таком виде
const employees = {
    frontend: 12000,
    backend: 10000,
    designer: 8000,
};

const total = (employees = {}) =>
    Object.values(employees).reduce((salary, employeeSalary) => salary + employeeSalary, 0);

console.log(total(employees))
employees.manager = 5000;
console.log(total(employees))

Или если хотите придерживаться вашего варианта то так:

const employeesList = ['frontend', 'backend', "designer"];
const salaries = {
    frontend: 12000,
    backend: 10000,
    designer: 8000,
    total: (staff = []) => staff.reduce((salary, employeeSalary) => salary + employeeSalary, 0),
    dayPay() {
        alert('We mush pay salary on Tuesday!');
    },
};

salaries.total(employeesList) // 30000
employees.manager = 5000;
employeesList.push('manager');
salaries.total(employeesList) // 35000
Ответ написан
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
total(){ 
  return Object.values(this).reduce((sum, a) => sum + a, 0);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы