Постройте 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), дополнительная память линейная. Копирование отдела здесь поверхностное; вложенные поля требуют отдельного решения.