> Какие структуры данных использовать для хранения параметров и результатов мемоизации в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Домклик

Стек: JavaScript

> Пример ответа

Для хранения параметров и результатов мемоизации в JavaScript чаще всего используют Map или WeakMap, реже -объекты или массивы.

  1. Map - оптимальный выбор для большинства случаев. Он поддерживает ключи любого типа (включая объекты и функции), сохраняет порядок вставки и имеет удобные методы set/get/has. Пример:

    JAVASCRIPT
    const memo = new Map();
    function expensive(n) {
    if (memo.has(n)) return memo.get(n);
    const result = n * 2; // дорогие вычисления
    memo.set(n, result);
    return result;
    }
  2. WeakMap - для случаев, когда ключи - объекты, и нужно избежать утечек памяти. WeakMap не препятствует сборке мусора, если объект-ключ удаляется из других мест. Подходит для мемоизации методов экземпляров классов или рекурсивных вызовов с объектными аргументами.

  3. Обычный объект ({}) - простой вариант, но ключи могут быть только строками или символами, что требует сериализации сложных параметров (например, JSON.stringify). Это может привести к потере производительности и ошибкам при циклических ссылках.

  4. Массив - редко, только если параметры - целые числа от 0 до N (например, для мемоизации чисел Фибоначчи). Но Map здесь удобнее из-за произвольных ключей.

Рекомендация: для функций с простыми аргументами (числа, строки) используйте Map; для объектных аргументов - WeakMap; избегайте объектов и массивов из-за ограничений и неочевидного поведения.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью