Как обогатить онлайн-пользователей данными отдела

Постройте Map отделов по ID, отфильтруйте online и создайте новые объекты пользователей. Так поиск отдела не требует полного прохода для каждой строки.

Короткий ответ

Что ответить на собеседовании

Постройте Map отделов по ID, отфильтруйте online и создайте новые объекты пользователей. Так поиск отдела не требует полного прохода для каждой строки.

Подробный разбор

Ответ с пояснениями

Условие

Есть users с полями id, online, departmentId и departments с id, name. Верните новый массив только онлайн-пользователей с полем department; для неизвестного отдела — null. Исходные массивы менять нельзя.

Ответ

Постройте Map отделов по ID, отфильтруйте online и создайте новые объекты пользователей. Так поиск отдела не требует полного прохода для каждой строки.

Решение:

const byId = new Map(departments.map(d => [d.id, d]));
const result = users.filter(u => u.online).map(u => ({
  ...u,
  department: byId.has(u.departmentId)
    ? { ...byId.get(u.departmentId) }
    : null,
}));

Ожидаемое время O(users + departments), дополнительная память линейная. Копирование отдела здесь поверхностное; вложенные поля требуют отдельного решения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее