Неизменяемое обновление по пути
Условие
setIn(obj, ['a', 0, 'b'], value) возвращает новый объект с изменённым значением. Все узлы на пути копируются, остальное остаётся по ссылке. Числовой сегмент означает массив.
Что проверяют тесты
меняет вложенное
нетронутые ветки те же по ссылке
работает с массивами
создаёт недостающие узлы
числовой сегмент создаёт массив
Как подойти
Структурное разделение: копируются только узлы на пути от корня к изменённому листу, всё остальное переиспользуется по ссылке. Это ровно то, на чём держится сравнение по ссылке в React и Redux: соседние ветки не изменились, значит подписанные на них компоненты не перерисуются. Immer делает то же самое через Proxy.
Подсказки: 3
- Рекурсия по пути: копируем текущий уровень и спускаемся.
- Тип создаваемого контейнера определяется типом следующего сегмента пути.
- Пустой путь означает «подставить значение».
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.