toSpliced() позволяет удалить, добавить или заменить элементы массива и при этом вернуть новый массив.
Это современная альтернатива splice(), когда нужно изменить структуру массива, но не трогать исходные данные.
Синтаксис
array.toSpliced(start)
array.toSpliced(start, deleteCount)
array.toSpliced(start, deleteCount, item1, item2, ...)
start - позиция, с которой начинается изменение массива.
deleteCount - сколько элементов нужно удалить.
После этого можно передать новые элементы, которые нужно вставить на это место.
Что делает toSpliced()
toSpliced() не меняет исходный массив.
Он создаёт новую версию массива с нужными изменениями.
const numbers = [1, 2, 3, 4];
const result = numbers.toSpliced(1, 2);
console.log(result); // [1, 4]
console.log(numbers); // [1, 2, 3, 4]
Удаление элементов
Если передать start и deleteCount, метод удалит нужное количество элементов в новом массиве.
const fruits = ["apple", "banana", "orange", "kiwi"];
const result = fruits.toSpliced(1, 2);
console.log(result); // ["apple", "kiwi"]
Добавление элементов
Если deleteCount равен 0, ничего не удаляется, а новые элементы вставляются в нужную позицию.
const numbers = [1, 4];
const result = numbers.toSpliced(1, 0, 2, 3);
console.log(result); // [1, 2, 3, 4]
console.log(numbers); // [1, 4]
Это удобный способ вставить элементы в середину массива без мутации исходного.
Замена элементов
toSpliced() умеет одновременно удалять старые элементы и вставлять новые.
const colors = ["red", "green", "blue"];
const result = colors.toSpliced(1, 1, "yellow");
console.log(result); // ["red", "yellow", "blue"]
console.log(colors); // ["red", "green", "blue"]
Здесь "green" был заменён на "yellow".
Что возвращает toSpliced()
toSpliced() всегда возвращает новый массив.
const numbers = [10, 20, 30];
const result = numbers.toSpliced(1, 1);
console.log(result); // [10, 30]
console.log(result === numbers); // false
Это не тот же самый массив, а новая копия.
Исходный массив не меняется
Это главное отличие от splice().
const items = ["a", "b", "c"];
const result = items.toSpliced(1, 1);
console.log(items); // ["a", "b", "c"]
console.log(result); // ["a", "c"]
Если нужно изменение “на месте”, используют splice().
Если deleteCount не указать
Если передать только start, метод удалит элементы от этой позиции до конца массива, но в новом результате.
const numbers = [1, 2, 3, 4];
const result = numbers.toSpliced(2);
console.log(result); // [1, 2]
console.log(numbers); // [1, 2, 3, 4]
Отрицательный индекс
start может быть отрицательным.
В этом случае отсчёт идёт с конца массива.
const numbers = [1, 2, 3, 4];
const result = numbers.toSpliced(-2, 1);
console.log(result); // [1, 2, 4]
Здесь -2 указывает на элемент 3.
toSpliced() и splice()
Эти методы делают похожие вещи, но работают по-разному.
const numbers = [1, 2, 3, 4];
const result = numbers.toSpliced(1, 2);
console.log(numbers); // [1, 2, 3, 4]
console.log(result); // [1, 4]
toSpliced() возвращает новый массив.
splice() меняет исходный массив прямо на месте.
toSpliced() и slice()
slice() только копирует часть массива.
toSpliced() умеет удалять, вставлять и заменять элементы.
const numbers = [1, 2, 3, 4];
console.log(numbers.slice(1, 3)); // [2, 3]
console.log(numbers.toSpliced(1, 2, 9)); // [1, 9, 4]
Это разные задачи, хотя названия похожи.
Поверхностная копия
toSpliced() создаёт поверхностную копию массива.
Это значит, что вложенные объекты внутри не копируются глубоко.
const users = [{ name: "Anna" }, { name: "Ivan" }];
const result = users.toSpliced(1, 0, { name: "Oleg" });
console.log(result);
// [{ name: "Anna" }, { name: "Oleg" }, { name: "Ivan" }]
Сами объекты внутри массива остаются обычными ссылками.
Когда это полезно
toSpliced() удобно использовать, когда:
- нужно удалить элементы без изменения исходного массива
- нужно вставить значения в середину массива
- нужно заменить часть массива
- важен неизменяемый стиль работы с данными
Пример:
const tasks = ["task-1", "task-3"];
const nextTasks = tasks.toSpliced(1, 0, "task-2");
console.log(tasks); // ["task-1", "task-3"]
console.log(nextTasks); // ["task-1", "task-2", "task-3"]
Частые ошибки
Думать, что toSpliced() меняет исходный массив
const numbers = [1, 2, 3];
numbers.toSpliced(1, 1);
console.log(numbers); // [1, 2, 3]
Если результат не сохранить, исходный массив останется прежним.
Путать toSpliced() и splice()
const numbers = [1, 2, 3];
const result = numbers.toSpliced(1, 1);
console.log(result); // [1, 3]
splice() в похожей ситуации вернул бы удалённые элементы и изменил исходный массив.
Путать toSpliced() и slice()
const numbers = [1, 2, 3, 4];
console.log(numbers.toSpliced(1, 2)); // [1, 4]
Этот метод не просто берёт часть массива, а именно строит новый массив с изменениями.
Быстрая памятка
toSpliced()удаляет, добавляет или заменяет элементы массива- метод возвращает новый массив
- исходный массив не меняется
startможет быть отрицательным- это “неизменяемая” альтернатива
splice()
Коротко
toSpliced() - это удобный способ изменить структуру массива без мутации исходных данных. Главное, что стоит запомнить: по смыслу он похож на splice(), но результатом всегда будет новый массив.