Мемоизация по объектным аргументам
Условие
memoizeByObject(fn): кэширует результат по объектному первому аргументу так, чтобы запись исчезала вместе с объектом (без утечки памяти). Кэш должен уметь хранить любые значения, включая undefined.
Что проверяют тесты
кэширует по объекту
разные объекты - разные записи
одинаковые по содержимому - разные ключи
кэширует undefined
примитивный ключ отвергается
Как подойти
Обычный Map в роли кэша по объектам - это утечка: он держит сильную ссылку, и объект никогда не соберётся сборщиком мусора. WeakMap решает ровно это, ценой двух ограничений: ключом может быть только объект и кэш нельзя перечислить. Практика - кэш разобранных данных, привязанный ко времени жизни компонента или узла DOM.
Подсказки: 2
- WeakMap держит ключи слабо - запись исчезает вместе с объектом.
- has, а не проверка значения: результат может быть undefined.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.