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

Неизменяемые операции над списком

Условие

createList(items): методы add, removeAt, updateAt, move - каждый возвращает НОВЫЙ список, исходный не меняется. Нетронутые элементы остаются теми же по ссылке.

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

  • добавляет

  • удаляет

  • обновляет элемент

  • нетронутые элементы те же по ссылке

  • перемещает

  • цепочка вызовов

Как подойти

Неизменяемый список с цепочкой вызовов. Главное требование - нетронутые элементы остаются теми же по ссылке: именно это позволяет memo-компонентам строк не перерисовываться при изменении одной строки. Глубокое копирование всего списка формально даёт правильный результат, но убивает всю оптимизацию ниже по дереву - и это ровно тот ответ, который отличает понимание от заучивания.

Подсказки: 3
  1. Каждый метод возвращает новую обёртку вокруг нового массива.
  2. Меняем только затронутый элемент - остальные переиспользуем по ссылке.
  3. splice мутирует, поэтому move работает с копией.

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

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