Пожалуй, самый комплексный метод для работы с массивом.
Он объединяет в себе две разные функциональности: удаляет часть массива и добавляет новые элементы на место удаленных.
При этом можно свести к нулю количество удаляемых элементов - тогда это будет просто добавление.
И можно не добавлять элементов - тогда это будет просто удаление.
Метод возвращает массив из удаленных элементов.
Пример: Удаление
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)
elem1, elem2, ..., elemNДобавляемые элементы в массив. Добавление начинается с позиции start.
Дополнение - если elemN массив, он добавляется как 1 элемент. Поэтому, если требуется добавить элементы из другого массива, но оставить исходный массив одномерным, нужно предварительно сформировать строку из элементов elemN, разделенных запятыми, и использовать eval()
Пример:
arr = [ "a,b,c", "d", "e" ]
из этого надо получить:
arr = [ "a", "b", "c", "d", "e" ]
for (j=0;j<arr.length;++j){ var k=-1 var tmp=[] while (arr[j].indexOf(",",k+1)>-1){ if ((arr[j].indexOf(",",k+1)>0)&&(arr[j].substring(k+1,arr[j].indexOf(",",k+1))!="")) tmp.push(arr[j].substring(k+1,arr[j].indexOf(",",k+1))) k=arr[j].indexOf(",",k+1) } if ((arr[j].indexOf(",",k+1)<arr[j].length)&&(arr[j].substring(k+1)!="")) tmp.push(arr[j].substring(k+1)) if (tmp.length>1){//поскольку предыдущий if всегда добавит хотя бы 1 элемент в tmp s='' for (var z=0;z<tmp.length;++z){ s=s+'"'+tmp[z]+'"' if (z!=tmp.length-1) s=s+',' } eval("arr.splice(j,1,"+s+")") j+=tmp.length-1 } }Пример:
arr = [ "a,b,c", "d", "e" ]
из этого надо получить:
arr = [ "a", "b", "c", "d", "e" ]
------------------------------------
ведь можно и так:
var abc = arr.splice(0,1);
var res = abc.split(",").concat(arr);
у вас будет работать только в одном случае
вот правильынй вариант:
arr=arr.join(','); arr=arr.split(',');Проблема с разной реализацией решается очень просто:
;(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);Обмен двух соседних элементов массива, аналог swap.
В index - адрес первого из меняемых
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.