Цель: освоить методы агрегации и суммирования данных в массиве объектов.
Эту задачу можно решить несколькими способами.
Способ 1: Использование Array.prototype.reduce
Этот метод идеально подходит для “свертывания” массива в одно значение, например, в объект.
reduce
с пустого объекта {}
.Способ 2: Использование цикла (for...of
или forEach
)
Классический подход, который легко читается.
result = {}
.reduce
: проверяйте наличие отдела в result
и обновляйте сумму бонусов.reduce
const sumBonusesByDepartment = (employees) => {
// Начинаем \"свертывание\" массива с пустого объекта {}.
// `acc` — это аккумулятор, который хранит итоговый объект.
// `employee` — текущий обрабатываемый элемент массива.
return employees.reduce((acc, employee) => {
const { department, bonus } = employee;
// Если в аккумуляторе еще нет такого отдела, инициализируем его.
// Используем `|| 0` на случай, если бонус не указан.
if (!acc[department]) {
acc[department] = 0;
}
// Прибавляем бонус сотрудника к общей сумме для его отдела.
acc[department] += bonus || 0;
// Возвращаем обновленный аккумулятор для следующего шага.
return acc;
}, {}); // Начальное значение аккумулятора.
};
Анализ решения:
for...of
const sumBonusesByDepartment = (employees) => {
// Создаем пустой объект для хранения результатов.
const result = {};
// Перебираем каждого сотрудника в массиве.
for (const employee of employees) {
const { department, bonus } = employee;
// Если отдела еще нет в результирующем объекте, создаем его.
if (!result[department]) {
result[department] = 0;
}
// Прибавляем бонус к сумме для соответствующего отдела.
result[department] += bonus || 0;
}
// Возвращаем итоговый объект.
return result;
};
Анализ решения:
result
объекта.Вам нужно реализовать функцию sumBonusesByDepartment
, которая принимает массив объектов employees
. Каждый объект содержит информацию о сотруднике: name
, department
и bonus
.
Функция должна вычислить общую сумму бонусов для каждого отдела и вернуть объект, где ключами являются названия отделов, а значениями — суммарный размер бонусов в этом отделе.
const employees = [
{ name: 'Иван', department: 'Разработка', bonus: 1000 },
{ name: 'Мария', department: 'Продажи', bonus: 1500 },
{ name: 'Петр', department: 'Разработка', bonus: 1200 },
{ name: 'Анна', department: 'Продажи', bonus: 1800 },
{ name: 'Елена', department: 'HR', bonus: 800 }
];
sumBonusesByDepartment(employees);
// Ожидаемый результат:
// { 'Разработка': 2200, 'Продажи': 3300, 'HR': 800 }
sumBonusesByDepartment
.{}
.bonus
, его бонус следует считать равным 0
.Цель: освоить методы агрегации и суммирования данных в массиве объектов.
Эту задачу можно решить несколькими способами.
Способ 1: Использование Array.prototype.reduce
Этот метод идеально подходит для “свертывания” массива в одно значение, например, в объект.
reduce
с пустого объекта {}
.Способ 2: Использование цикла (for...of
или forEach
)
Классический подход, который легко читается.
result = {}
.reduce
: проверяйте наличие отдела в result
и обновляйте сумму бонусов.reduce
const sumBonusesByDepartment = (employees) => {
// Начинаем \"свертывание\" массива с пустого объекта {}.
// `acc` — это аккумулятор, который хранит итоговый объект.
// `employee` — текущий обрабатываемый элемент массива.
return employees.reduce((acc, employee) => {
const { department, bonus } = employee;
// Если в аккумуляторе еще нет такого отдела, инициализируем его.
// Используем `|| 0` на случай, если бонус не указан.
if (!acc[department]) {
acc[department] = 0;
}
// Прибавляем бонус сотрудника к общей сумме для его отдела.
acc[department] += bonus || 0;
// Возвращаем обновленный аккумулятор для следующего шага.
return acc;
}, {}); // Начальное значение аккумулятора.
};
Анализ решения:
for...of
const sumBonusesByDepartment = (employees) => {
// Создаем пустой объект для хранения результатов.
const result = {};
// Перебираем каждого сотрудника в массиве.
for (const employee of employees) {
const { department, bonus } = employee;
// Если отдела еще нет в результирующем объекте, создаем его.
if (!result[department]) {
result[department] = 0;
}
// Прибавляем бонус к сумме для соответствующего отдела.
result[department] += bonus || 0;
}
// Возвращаем итоговый объект.
return result;
};
Анализ решения:
result
объекта.Вам нужно реализовать функцию sumBonusesByDepartment
, которая принимает массив объектов employees
. Каждый объект содержит информацию о сотруднике: name
, department
и bonus
.
Функция должна вычислить общую сумму бонусов для каждого отдела и вернуть объект, где ключами являются названия отделов, а значениями — суммарный размер бонусов в этом отделе.
const employees = [
{ name: 'Иван', department: 'Разработка', bonus: 1000 },
{ name: 'Мария', department: 'Продажи', bonus: 1500 },
{ name: 'Петр', department: 'Разработка', bonus: 1200 },
{ name: 'Анна', department: 'Продажи', bonus: 1800 },
{ name: 'Елена', department: 'HR', bonus: 800 }
];
sumBonusesByDepartment(employees);
// Ожидаемый результат:
// { 'Разработка': 2200, 'Продажи': 3300, 'HR': 800 }
sumBonusesByDepartment
.{}
.bonus
, его бонус следует считать равным 0
.Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!