Повторный find даёт до O(NM) сравнений. Постройте Map пользователей по id один раз и используйте get: при обычной модели хеш-таблицы ожидаемое время станет O(N+M).
Как убрать квадратичный поиск имён пользователей?
Повторный find даёт до O(NM) сравнений. Постройте Map пользователей по id один раз и используйте get: при обычной модели хеш-таблицы ожидаемое время станет O(N+M).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Код строит строки заказов: orders.map(o => ({...o, user: users.find(u => u.id === o.userId)})). Есть N заказов и M пользователей с уникальными id. Что неэффективно и как сохранить поведение при отсутствии пользователя?
Ответ
Повторный find даёт до O(NM) сравнений. Постройте Map пользователей по id один раз и используйте get: при обычной модели хеш-таблицы ожидаемое время станет O(N+M).
const byId = new Map(users.map(user => [user.id, user]));
const rows = orders.map(order => ({...order, user: byId.get(order.userId)}));
Дополнительная память — O(M), отсутствующий пользователь по-прежнему даёт undefined. Уникальность id важна: find вернул бы первое совпадение, а Map при повторных ключах сохранил бы последнее. Нельзя считать такую замену эквивалентной без проверки этого условия.