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

Неизменяемое обновление по пути

Условие

setIn(obj, ['a', 0, 'b'], value) возвращает новый объект с изменённым значением. Все узлы на пути копируются, остальное остаётся по ссылке. Числовой сегмент означает массив.

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

  • меняет вложенное

  • нетронутые ветки те же по ссылке

  • работает с массивами

  • создаёт недостающие узлы

  • числовой сегмент создаёт массив

Как подойти

Структурное разделение: копируются только узлы на пути от корня к изменённому листу, всё остальное переиспользуется по ссылке. Это ровно то, на чём держится сравнение по ссылке в React и Redux: соседние ветки не изменились, значит подписанные на них компоненты не перерисуются. Immer делает то же самое через Proxy.

Подсказки: 3
  1. Рекурсия по пути: копируем текущий уровень и спускаемся.
  2. Тип создаваемого контейнера определяется типом следующего сегмента пути.
  3. Пустой путь означает «подставить значение».

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

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