Справочник javascript: splice

Форум

Учебник Node.JS скринкаст Стандарт языка

Справочник

Discord чат

 
Статьи Тест знаний Аналоги функций PHP  

splice

Синтаксис

arrayObj.splice( start, deleteCount, [elem1[, elem2[, ...[, elemN]]]] )

Аргументы

start
Индекс в массиве, с которого начинать удаление.
deleteCount
Кол-во элементов, которое требуется удалить, начиная с индекса start.
  • IE: если этот параметр не указан, то ни один элемент не будет удалён.
  • Firefox: если этот параметр не указан, то будут удалены все элементы, начиная с индекса start.
  • Opera: (исследовано в версии 9.61) если этот параметр не указан, то будут удалён 1 элемент, имеющий индекс start+1. В этом же случае вместо удалённого элемента будет возвращена пустая строка.
elem1, elem2, ..., elemN
Добавляемые элементы в массив. Добавление начинается с позиции start.

Описание, примеры

Пожалуй, самый комплексный метод для работы с массивом.

Он объединяет в себе две разные функциональности: удаляет часть массива и добавляет новые элементы на место удаленных.

При этом можно свести к нулю количество удаляемых элементов - тогда это будет просто добавление.

И можно не добавлять элементов - тогда это будет просто удаление.

Метод возвращает массив из удаленных элементов.

Пример: Удаление

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 - адрес первого из меняемых

array.splice(index, 2, array[index + 1], array[index]);

Автор: Гость (не зарегистрирован), дата: 23 октября, 2012 - 02:29

#permalink

стоит упомянуть что данный метод изменяет оригинальный массив


Автор: Invis1ble, дата: 21 января, 2013 - 18:20

#permalink

Отлично. Я в javascript не эксперт, однако меня смутило поведение оператора delete, которое оставляет "дырки" со значением undefined в Array. Были опасения утечки памяти в долгоживущих скриптах. Теперь знаю, как грамотно можно удалить те или иные элементы.
IMHO, было бы полезно добавить в статью заметку о применении splice именно для удаления с акцентом на отличие от delete.


 
Поиск по сайту
Содержание

Дерево всех статей

Последние темы на форуме
Forum