Код Senior Реализация с нуля обновлено

Мемоизация по объектным аргументам

Условие

memoizeByObject(fn): кэширует результат по объектному первому аргументу так, чтобы запись исчезала вместе с объектом (без утечки памяти). Кэш должен уметь хранить любые значения, включая undefined.

Что проверяют тесты

  • кэширует по объекту

  • разные объекты - разные записи

  • одинаковые по содержимому - разные ключи

  • кэширует undefined

  • примитивный ключ отвергается

Как подойти

Обычный Map в роли кэша по объектам - это утечка: он держит сильную ссылку, и объект никогда не соберётся сборщиком мусора. WeakMap решает ровно это, ценой двух ограничений: ключом может быть только объект и кэш нельзя перечислить. Практика - кэш разобранных данных, привязанный ко времени жизни компонента или узла DOM.

Подсказки: 2
  1. WeakMap держит ключи слабо - запись исчезает вместе с объектом.
  2. has, а не проверка значения: результат может быть undefined.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.