Spec-Zone.ru › JavaScript

Array.prototype.splice()

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Метод splice() экземпляров Array изменяет содержимое массива, удаляя или заменяя существующие элементы и/или добавляя новые элементы на месте.

Чтобы создать новый массив с удаленным и/или замененным сегментом без изменения исходного массива, используйте toSpliced(). Чтобы получить доступ к части массива, не изменяя его, см. slice().

Попробуйте

const months = ["Jan", "March", "April", "June"];
months.splice(1, 0, "Feb");
// Inserts at index 1
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, "May");
// Replaces 1 element at index 4
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "May"]

Синтаксис

splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2)
splice(start, deleteCount, item1, item2, /* …, */ itemN)

Параметры

start
Индекс с нулевым началом, с которого начинать изменение массива, преобразованный в целое число.
  • Отрицательный индекс отсчитывается с конца массива — если -array.length <= start < 0, используется start + array.length.
  • Если start < -array.length, используется 0.
  • Если start >= array.length, элемент не будет удален, но метод будет работать как функция добавления, добавляя столько элементов, сколько предоставлено.
  • Если start опущен (и splice() вызывается без аргументов), ничего не удаляется. Это отличается от передачи undefined, который преобразуется в 0.
deleteCount Необязательно

Целое число, указывающее количество элементов в массиве для удаления, начиная с start.

Если deleteCount опущен, или если его значение больше или равно количеству элементов после позиции, указанной start, то все элементы от start до конца массива будут удалены. Однако, если вы хотите передать любой параметр itemN, вы должны передать Infinity как deleteCount, чтобы удалить все элементы после start, поскольку явный undefined преобразуется в 0.

Если deleteCount равно 0 или отрицательное, элементы не удаляются. В этом случае следует указать как минимум один новый элемент (см. ниже).

item1, …, itemN Необязательно

Элементы для добавления в массив, начиная с start.

Если вы не указываете никаких элементов, splice() будет только удалять элементы из массива.

Возвращаемое значение

Массив, содержащий удаленные элементы.

Если удален только один элемент, возвращается массив из одного элемента.

Если элементы не удалены, возвращается пустой массив.

Описание

Метод splice() является мутирующим методом. Он может изменять содержимое this. Если указанное количество вставляемых элементов отличается от количества удаляемых элементов, также изменится length массива. В то же время он использует [Symbol.species] для создания нового экземпляра массива для возврата.

Если удаленная часть является разреженной, массив, возвращаемый splice(), также является разреженным, причем соответствующие индексы представляют собой пустые слоты.

Метод splice() является общим. Он ожидает, что значение this будет иметь свойство length и целочисленные свойства. Хотя строки также похожи на массивы, этот метод не подходит для их применения, так как строки неизменяемы.

Примеры

Удалить 0 (ноль) элементов перед индексом 2 и вставить "drum"

const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum");

// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed is [], no elements removed

Удалить 0 (ноль) элементов перед индексом 2 и вставить "drum" и "guitar"

const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum", "guitar");

// myFish is ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed is [], no elements removed

Удалить 0 (ноль) элементов по индексу 0 и вставить "angel"

splice(0, 0, ...elements) вставляет элементы в начало массива, как unshift().

const myFish = ["clown", "mandarin", "sturgeon"];
const removed = myFish.splice(0, 0, "angel");

// myFish is ["angel", "clown", "mandarin", "sturgeon"]
// no items removed

Удалить 0 (ноль) элементов по последнему индексу и вставить "sturgeon"

splice(array.length, 0, ...elements) вставляет элементы в конец массива, как push().

const myFish = ["angel", "clown", "mandarin"];
const removed = myFish.splice(myFish.length, 0, "sturgeon");

// myFish is ["angel", "clown", "mandarin", "sturgeon"]
// no items removed

Удалить 1 элемент по индексу 3

const myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"];
const removed = myFish.splice(3, 1);

// myFish is ["angel", "clown", "drum", "sturgeon"]
// removed is ["mandarin"]

Удалить 1 элемент по индексу 2 и вставить "trumpet"

const myFish = ["angel", "clown", "drum", "sturgeon"];
const removed = myFish.splice(2, 1, "trumpet");

// myFish is ["angel", "clown", "trumpet", "sturgeon"]
// removed is ["drum"]

Удалить 2 элемента из индекса 0 и вставить "parrot", "anemone" и "blue"

const myFish = ["angel", "clown", "trumpet", "sturgeon"];
const removed = myFish.splice(0, 2, "parrot", "anemone", "blue");

// myFish is ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed is ["angel", "clown"]

Удалить 2 элемента, начиная с индекса 2

const myFish = ["parrot", "anemone", "blue", "trumpet", "sturgeon"];
const removed = myFish.splice(2, 2);

// myFish is ["parrot", "anemone", "sturgeon"]
// removed is ["blue", "trumpet"]

Удалить 1 элемент из индекса -2

const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(-2, 1);

// myFish is ["angel", "clown", "sturgeon"]
// removed is ["mandarin"]

Удалить все элементы, начиная с индекса 2

const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2);

// myFish is ["angel", "clown"]
// removed is ["mandarin", "sturgeon"]

Использование splice() на разреженных массивах

Метод splice() сохраняет разреженность массива.

const arr = [1, , 3, 4, , 6];
console.log(arr.splice(1, 2)); // [empty, 3]
console.log(arr); // [1, 4, empty, 6]

Вызов splice() на не-массивных объектах

Метод splice() считывает свойство length объекта this. Затем он обновляет целочисленные свойства и свойство length по мере необходимости.

const arrayLike = {
  length: 3,
  unrelated: "foo",
  0: 5,
  2: 4,
};
console.log(Array.prototype.splice.call(arrayLike, 0, 1, 2, 3));
// [ 5 ]
console.log(arrayLike);
// { '0': 2, '1': 3, '3': 4, length: 4, unrelated: 'foo' }

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.splice

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
splice
1
12
1
4
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.concat()
  • Array.prototype.push()
  • Array.prototype.pop()
  • Array.prototype.shift()
  • Array.prototype.slice()
  • Array.prototype.toSpliced()
  • Array.prototype.unshift()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API