Slice или splice мутирует массив?
Массивы и структуры данных
`splice` мутирует (изменяет) исходный массив, а `slice` — нет: `slice` возвращает копию части массива, не трогая оригинал.
slice — не мутирует
Возвращает новый массив с элементами от start до end; исходный не меняется:
const arr = [1, 2, 3, 4, 5];
const part = arr.slice(1, 3); // [2, 3]
arr; // [1, 2, 3, 4, 5] — без измененийsplice — мутирует
Удаляет/вставляет элементы на месте, меняет исходный массив, возвращает удалённые:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(1, 2); // удалить 2 с индекса 1
removed; // [2, 3]
arr; // [1, 4, 5] — изменён!Мнемоника
- sPlice — с буквой P (как в «изменяет на месте») — мутирует.
- slice — «отрезает копию» — не мутирует.
Как избежать мутации
Работать с копией или использовать иммутабельные аналоги:
const next = [...arr]; next.splice(1, 1); // копия
const spliced = arr.toSpliced(1, 1); // ES2023, иммутабельноКоротко для собеседования
splice мутирует исходный массив (удаляет/вставляет на месте, возвращает удалённые); slice не мутирует (возвращает копию части). Мнемоника: sPlice изменяет. Иммутабельная альтернатива splice — toSpliced (ES2023).