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