PassFront
  1. PassFront
  2. База знаний
  3. Массивы и структуры данных

В чем разница между методами массива 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.

Другие вопросы раздела