Пожалуй, самый комплексный метод для работы с массивом.
Он объединяет в себе две разные функциональности: удаляет часть массива и добавляет новые элементы на место удаленных.
При этом можно свести к нулю количество удаляемых элементов - тогда это будет просто добавление.
И можно не добавлять элементов - тогда это будет просто удаление.
Метод возвращает массив из удаленных элементов.
Пример: Удаление
arr = [ "a", "b", "c", "d", "e" ]
removed = arr.splice(1,2)
// removed = [ "b", "c"] (2 элемента с arr[1])
// arr = ["a", "d", "e"] (те что остались)
Пример: Удаление одного элемента
arr = [ "a", "b", "c", "d", "e" ]
// удалим с индекса 2 один элемент
arr.splice(2,1)
// arr = ["a", "b", "d", "e"]
Пример: Добавление элементов
arr = [ "a", "b", "c", "d", "e" ]
// начиная с индекса 2 удалим 0 элементов
// и добавим "b+"
arr.splice(2,0,"b+")
// arr = ["a", "b", "b+", "c", "d", "e"]
Пример: С конца
arr = [ "a", "b", "c", "d", "e" ]
// удалим с индекса 1 начиная с конца 1 элемент
arr.splice(-1,1)
Автор: elser (не зарегистрирован), дата: 2 февраля, 2011 - 14:25
#permalinkПример:
arr = [ "a,b,c", "d", "e" ]
из этого надо получить:
arr = [ "a", "b", "c", "d", "e" ]
------------------------------------
ведь можно и так:
var abc = arr.splice(0,1);
var res = abc.split(",").concat(arr);
Автор: termi_uc, дата: 30 марта, 2012 - 08:37
#permalinkПроблема с разной реализацией решается очень просто:
;(function(_origArraySplice) { if([1,2].splice(0).length != 2) { Array.prototype.splice = function(index, howMany) { return _origArraySplice.call( this, index, howMany === void 0 ? (this.length - index) : howMany, Array.prototype.slice.call(arguments, 2) ) } } })(Array.prototype.splice);Автор: Дмитрий Минаев (не зарегистрирован), дата: 2 мая, 2012 - 15:25
#permalinkОбмен двух соседних элементов массива, аналог swap.
В index - адрес первого из меняемых
Автор: Гость (не зарегистрирован), дата: 23 октября, 2012 - 02:29
#permalinkстоит упомянуть что данный метод изменяет оригинальный массив
Автор: Invis1ble, дата: 21 января, 2013 - 18:20
#permalinkОтлично. Я в javascript не эксперт, однако меня смутило поведение оператора delete, которое оставляет "дырки" со значением undefined в Array. Были опасения утечки памяти в долгоживущих скриптах. Теперь знаю, как грамотно можно удалить те или иные элементы.
IMHO, было бы полезно добавить в статью заметку о применении splice именно для удаления с акцентом на отличие от delete.