Как удалить определенный элемент массива JavaScript? Демонстрация удаления конкретного элемента с использованием метода splice

М етод splice() в массивах Javascript изменяет содержимое массива, добавляя новые элементы, удаляя старые.Синтаксис

Его синтаксис выглядит следующим образом:

Array.splice(index, howMany, [, ..., elementN]);

Детали параметров
  • index – Индекс, с которого начинается изменение массива.
  • howMany – Целое число, указывающее количество удаляемых старых элементов массива. Если howMany равно 0, элементы не удаляются.
  • element1, …, elementN – Элементы, добавляемые в массив. Если вы не указываете никаких элементов, splice просто удаляет элементы из массива.
Возвращаемое значение

Возвращает извлеченный массив на основе переданных параметров.

Пример

Попробуйте следующий пример.

JavaScript - Массивы. Метод splice var arr = ["orange", "melon", "milk", "sugar", "coffee"]; var removed = arr.splice(2, 0, "water"); document.write("После добавления 1: " + arr); document.write("
удален: " + removed); removed = arr.splice(3, 1); document.write("
После добавления 1: " + arr); document.write("
удален: " + removed);

Вывод После добавления 1: orange,melon,water,milk,sugar,coffee удален: После добавления 1: orange,melon,water,sugar,coffee удален: milk

Всю пользу встроенных методов JavaScript можно оценить только правильно понимая, как они работают. В этой статье мы разберем три метода: slice () , splice () и split () . Даже опытные разработчики часто их путают: возможно из-за того, что все три названия так похожи.

Студентам и начинающим разработчикам: внимательно прочитайте эту статью-об этих трех методах вас могут спросить на собеседовании.

В конце вы найдете конспект информации о всех трех методах. Давайте начнем.

Массивы в JavaScript

Сперва нужно разобраться, как работают массивы JavaScript. Как и в других языках программирования, массивы используются для хранения нескольких единиц данных. Разница в том, что массивы JavaScript могут содержать несколько типов данных одновременно .

Чтобы работать с такими массивами, нам понадобятся JavaScript-методы: например, slice () & splice () . Создать массив можно так:

Let arrayDefinition = ; // Array declaration in JS

Теперь создадим другой массив с данными разного типа:

Let array = ;

В JavaScript можно создавать массивы с разными типами данных: с числами, строками и логическими значениями.

Slice ()

Метод slice () копирует заданную часть массива и возвращает эту скопированную часть в виде нового массива. Исходный массив при этом не изменяется .

Array.slice(from, until);

  • From: Нарезает массив начиная с этого элемента
  • Until: Нарезает массив до этого элемента

Например, я хочу нарезать первые три элемента из упомянутого выше массива. Первый элемент массива всегда обозначается как 0, поэтому в качестве параметра from я указывают 0.

Array --> 1 // included array --> 2 // included array --> 3 // included array --> "hello world" // not included

Здесь можно запутаться! Вот почему я объявил “until” .

Let newArray = array.slice(0, 3); // Return value is also an array

Наконец я создаю новый массив и связываю его с переменной newArray . Посмотрим результат:

Нарезка массива и добавление элементов в новый массив


Переменная newArray становится новым массивом, оригинальный массив остается без изменений.

Важное примечание: метод Slice() можно использовать и в строках.

Splice ()

Название этого метода похоже на slice(): в таких похожих названиях разработчики часто путаются. Метод splice() добавляет и удаляет элементы из массива, меняя его. Давайте посмотрим, как добавлять и удалять элементы с помощью метода splice() :

Удаление элементов

Чтобы удалить элементы, введите элемент, с которого нужно начать (index) и количество элементов, которые нужно удалить (number of elements) :

Array.splice(index, number of elements);

Параметр Index  - это начальная точка удаления элементов. Элементы с порядковым номером меньше заданного параметра Index не будут удалены:

Array.splice(2); // Every element starting from index 2, will be removed

Если не указать второй параметр, все элементы от заданного параметра Index и до конца будут удалены:

В качестве еще одно примера, я указал 1 в качестве второго параметра: таким образом, каждый раз при повторе метода splice () будет удалять по одному элементу, начиная со второго:

Array.splice(2, 1);

Массив до метода splice ()

Splice () применен один раз:

Элемент 3 удален: следовательно, теперь элемент “hello world” имеет порядковый номер 2

Splice () применен два раза:

На этот раз, был удален элемент “hello world”, потому что его порядковый номер 2

Так можно продолжать до тех пор, пока не останется элементов с порядковым номером 2.

Добавление элементов

Чтобы добавить элементы с помощью splice () , необходимо ввести их в качестве третьего, четвертого и пятого элемента (в зависимости от того, сколько элементов нужно добавить):

Array.splice(index, number of elements, element, element);

В качестве примера, добавим элементы a и b в самое начало массива:

Array.splice(0, 0, "a", "b");


Элементы a и b добавлены в начало массива

Split ()

Методы Slice() и splice() используются для массивов. Метод split() используется для строк . Он разделяет строку на подстроки и возвращает их в виде массива. У этого метода 2 параметра, и оба из них не обязательно указывать .

String.split(separator, limit);

  • Separator: определяет, как строка будет поделена на подстроки: запятой, знаком и т.д.
  • Limit: ограничивает количество подстрок заданным числом

Метод split() не работает напрямую с массивами . Тем не менее, сначала можно преобразовать элементы массива в строки и уже после применить метод split() .

Давайте посмотрим, как это работает.

Сначала преобразуем массив в строку с помощью метода toString() :

Let myString = array.toString();

Затем разделим строку myString запятыми и ограничим количество подстрок до трех. Затем преобразуем строки в массив:

Let newArray = myString.split(",", 3);

В виде массива вернулись первые 3 элемента

Таким образом, элементы массива myString разделены запятыми. Мы поставили ограничение в 3 подстроки, поэтому в качестве массива вернулись первые 3 элемента.

Примечание: Используя команду array.split(""); можно все символы в строке разделить на подстроки.


Все символы разделены на подстроки

Конспект: Slice ()
  • Копирует элементы из массива
  • Возвращает их в новый массив
  • Не меняет оригинальный массив
  • Нарезает массив с помощью параметров from и until: array.slice (from, until)
  • Не включает параметр, заданный в “until”
  • Используется и в массивах, и в строках
Splice ()
  • Добавляет и удаляет элементы из массива
  • Возвращает массив удаленных элементов
  • Меняет массив
  • Добавление элементов: array.splice (index, number of elements, element)
  • Удаление элементов: array.splice (index, number of elements)
  • Используется только в массивах
Split ()
  • Делит строки на подстроки
  • Возвращает их в виде массива
  • 2 параметра, и оба из них не обязательно указывать: string.split(separator, limit)
  • Не меняет оригинальную строку
  • Используется только в строках

В JavaScript есть еще много других встроенных методов работы с массивами и строками. Если вы научитесь их использовать, программировать станет намного проще.

В JavaScript удалить элемент массива можно несколькими методами. К ним относятся методы pop и shift . Метод pop удаляет первый элемент из заданного массива. Метод shift удаляет последний элемент из заданного массива.

Можно задать длину массива 0, если требуется удалить все элементы из данного массива. Но что, вам нужно удалить определенный элемент?

Например:

Array_name.splice (index);

Array_name.delete

Можно использовать метод splice . Он возвращает новый массив удаленных элементов. А первоначальный массив содержит оставшиеся элементы.

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

Демонстрация удаления конкретного элемента с использованием метода splice

В этой демо-версии создается массив чисел. Первоначально в массив добавляются пять элементов. После этого используется метод splice для удаления третьего элемента. Таким же образом в JavaScript можно удалить первый элемент массива.

Элементы числового массива отображаются до и после использования метода JavaScript splice следующим образом:

Код JavaScript с методом splice :


"; for (i=0; i < Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; } document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2,1); var the_arr_before_after = "Array elements after splice method:
"; for (i=0; i < Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "

Вы заметили, что я использовал для JavaScript удаления элемента массива два параметра. Первый указывает индекс элемента, который нужно удалить. Второй – сколько элементов нужно удалить после указанного ключа.

В следующей демо-версии показан случай, когда мы используем второй параметр.

Что делать, если второй параметр не указан в JavaScript-методе splice?

Использование того же кода, но без второго параметра в методе splice :

Arr_Numbers.splice(2);

Код и результат:

Посмотреть онлайн демо-версию и код

Как видите, здесь были удалены и все элементы перед указанным номером индекса. Кроме этого метод splice возвращает массив удаленных элементов.

Код JavaScript :

var Arr_Numbers = ; var i; var the_arr_before_after = "The original array:
"; for (i=0; i < Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; } document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2); var the_arr_before_after = "Array elements after splice method:
"; for (i=0; i < Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; } document.getElementById("p2").innerHTML = the_arr_before_after; //Удаленные элементы массива в возвращаемом массиве var the_arr_before_after = "The removed array elements:
"; for (i=0; i < Arrretrun.length; i++){ the_arr_before_after += Arrretrun[i] + "
"; } document.getElementById("p3").innerHTML = the_arr_before_after;

Использование функции delete для удаления элемента массива

Также, чтобы в JavaScript удалить элемент массива, можно использовать функцию delete . Но она сохраняет пустое место, и если вы вернете этот массив после использования функции, то удаленный элемент будет отображен как undefined .

Рассмотрим демо-версию, в которой используется функция delete :

Посмотреть онлайн демо-версию и код

Код JavaScript :

var Arr_Strings = ["The","JavaScript","Array","Totorial"]; var i; var the_arr_before_after = "The original string array elements:

"; for (i=0; i < Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; } document.getElementById("p1").innerHTML = the_arr_before_after; //Использование функции delete delete Arr_Strings; var the_arr_before_after = "Array elements after splice method:

"; for (i=0; i < Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; } document.getElementById("p2").innerHTML = the_arr_before_after;

Вы видите, что для третьего элемента отображается undefined после его удаления с помощью функции delete .

Среди JavaScript разработчиков распространено непонимание разницы между этими двумя методами. Знаете ли вы в чем отличие slice от splice ?

Оба эти метода предназначены для разбиения массива JavaScript на части, но не понимание когда нужно использовать slice , а когда splice ведет к трудно-отлавливаемым ошибкам. Давайте рассмотрим каждый из двух методов по отдельности, тогда разница станет очевидна.

Slice - режем и создаем

Английский глагол slice переводится как "резать". Честно говоря, не понимаю чем руководствовались разработчики спецификации, но полагаться на перевод слов в JS нельзя. Согласно спецификации ECMAScript 5.1, метод slice принимает два аргумента: начальный и конечный индексы. Затем создается новый массив содержащий элементы старого от начального индекса до конечного. Самое важное - всегда создается новый массив, т.е. массив к которому был применен метод останется прежним. Так же не забывайте, что вторым параметром указывается не количество элементов, а конечный индекс, поэтому второй параметр всегда должен быть больше первого, иначе вернется пустой массив. Рассмотрим примеры.

Var a = ; console.log(a); // var b = a.slice(3, 5); console.log(a); // console.log(b); // var c = a.slice(4, 2); console.log(a); // console.log(c);//

Как обычно в JS, нужно просто запомнить, что slice вернет вам элементы начиная с указанного начального индекса (включая сам этот элемент ) и до указанного конечного индекса, но без конечного элемента .

Splice - режем и делим

С английского splice - сращивать. Опять же не видно связи между глаголом и действиями метода. Основное отличие splice в том, что он изменяет исходный массив. Метод все так же принимает начальный и конечный индекс, однако важно помнить, что ваш исходный массив лишится обрезанных элементов.

Var a = ; console.log(a); // var b = a.splice(3, 5); console.log(a); // console.log(b); // var c = a.splice(4, 2); console.log(a); // console.log(c); //

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

Так же метод splice удобно использовать для удаления элементов массива. Напомню, что обычный delete a; не удалит сам элемент, а установит его в undefined. Чтобы удалить элемент лучше всего использовать a.splice(1, 1);

Var a = ; delete a; console.log(a); // var a = ; a.splice(1, 1); console.log(a); //

Замечу, что в последней версии Google Chrome консоль в первом случае покажет вам такой результат: . Вероятно, она просто не отобразила undefined-элемент, т.к. на самом деле удаления не произошло.

Вставляет, удаляет или замещает элементы массива.

Спецификация: ECMAScript 3-е издание. Синтаксис

Array.splice(start, deleteCount, element1, element2, ..., elementN)

Параметры start Индекс элемента массива, с которого будут удалены из массива и/или добавлены в массив элементы. Допускается использование отрицательных значений, в этом случае индекс с которого будет вызван метод будет расчитан по следующей формуле: length (длина массива) + start . deleteCount Необязательное значение. Целое число, определяющее количество удаляемых из массива элементов, начииная с индекса указанного в start . Если deleteCount равен 0 , то элементы не удаляются. Если значение deleteCount больше количества оставшихся элементов в массиве, то будут удалены все элементы до конца массива. Отрицательные значения не допускаются. elementN Необязательное значение. Добавляемые к массиву элементы. Если вы не укажете никакого элемента, splice() просто удалит элементы из массива. Возвращаемое значение

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

Описание

Метод splice() удаляет указанное количество элементов массива, начиная с элемента, позиция которого определяется аргументом start , включая его, и заменяет значениями, перечисленными в списке аргументов (element1, ..., elementN). Элементы массива, расположенные после вставляемых или удаляемых элементов, сдвигаются и образуют непрерывную последовательность с остальной частью массива.

На заметку: В отличие от метода с похожим именем, slice() , метод splice() непосредственно изменяет массив.

Примеры

Метод splice() удаляет 0 элементов по индексу 2 и вставляет "Lemon":

один элемент по индексу 3 :

В следующем примере метод splice() удаляет один элемент по индексу 2 и вставляет "Kiwi".

Инструкции