JavaScript: как удалить значения из массива
Массивом называется упорядоченный тип данных, хранящий несколько значений. Это означает, что каждый элемент в массиве имеет числовой идентификатор (индекс), который используется для ссылки на его место в строке.
Массивы начинаются с индекса 0 и увеличиваются на 1 для каждого значения. Для обращения к значению в массиве воспользуйтесь соответствующим индексом и заключите его в квадратные скобки [] .
let numbers = [10,20,30,40];// выводит значение с явным указанием индекса
console.log(numbers[0]); # 10
console.log(numbers[1]); # 20
console.log(numbers[2]); # 30
console.log(numbers[3]); # 40// другой способ: цикл for
for(let i=0; i console.log(numbers[i]);
>
Но что, если мы захотим удалить значение из нашего массива? Для этого существует четыре способа, каждый из которых имеет свои плюсы и минусы, о которых поговорим ниже.
Примечание: все четыре способа доступны без какого-либо импорта дополнительных библиотек.
Через ключевое слово delete
Если вы не любите сложностей, то воспользуйтесь простейшим методом удаления значений из массива — ключевым словом delete . Вам нужно всего лишь указать имя переменной с индексом, который хотите удалить.
let numbers = [1,2,3,4];delete numbers[1];
console.log(numbers); // [1, undefined, 3, 4]
Но будьте внимательны. Несмотря на кажущуюся простоту данного способа, он часто приводит к лишней головной боли, поскольку теперь в вашем массиве зияет дыра.
Основной вывод: при удалении значения из массива через delete задайте себе вопрос: «Нужно ли мне переиндексировать массив?».
Через метод pop()
Вам нужно удалить самое большое индексное значение из массива? Или же вы хотите переиндексировать массив так, чтобы избавиться от undefined в конце? Тогда метод pop() — это то, что доктор прописал.
let numbers = [1,2,3,4];numbers.pop();
console.log(numbers); // [1,2,3]
Через метод splice()
Если вы хотите удалить определенное значение из массива, а не конкретный индекс, и вы готовы к переиндексации массива, то присмотритесь к методу splice() .
Сплайсинг массива создает новый массив, который удаляет некое количество значений и обрезает массив слева, начиная с определенного индекса.
let numbers = [1,2,3,4];numbers.splice(2);
console.log(numbers); // [1,2]
Если же вы хотите удалить только одно значение, то воспользуйтесь вторым (не обязательным) параметром в методе splice() .
let numbers = [1,2,3,4];numbers.splice(2,1);
console.log(numbers); // [1,2,4]
Обратите внимание, что мы не выводим результат массива сразу. Это потому, что данный метод будет возвращать удаленные значения.
let numbers = [1,2,3,4];console.log(numbers.splice(2,1)); // [3]
Все, конечно, круто и здорово, однако в реальных примерах вам, вряд ли, удастся захардкодить значение индекса. Поэтому давайте воспользуемся методом indexOf() для поиска индекса значения, соответствующего условию.
// удаляет значение 3 из массива let numbers = [1,2,3,4];
i = numbers.indexOf(3);
if(i >= 0) numbers.splice(i,1);
>
console.log(numbers); // [1,2,4]
Условие if в этом коде используется для того, чтобы подтвердить нахождение значения в массиве. Если же значение не найдено, то метод indexOf() вернет -1 . Таким образом, если i больше или равно 0 , то это значение было найдено в массиве.
Через метод filter()
Метод splice() весьма удобен для нахождения и удаления одного значения. Но бывает так, что вам нужно удалить все вхождения значения (или условия) из массива. В таком случае, вашим новым другом станет метод filter() .
Этот метод принимает функцию в качестве аргумента и сохраняет значения, соответствующие true в функции filter . Чтобы отфильтровать определенное значение, необходимо проверить отрицательные индексы.
let numbers = [1,2,3,4];
numbers = numbers.filter((n) => );
console.log(numbers); // [1,2,4]
Обратите внимание, что нам приходится заново присваивать номера индексов. Дело в том, что, в отличие от метода splice() , filter() возвращает новый массив, а не выполняет действия с исходными данными.
Заключение
Это не все способы удаления значений из массива, но и среди указанных можете выбрать метод по душе или же придумать что-то свое.
- Зачем нужен Strict Mode в JavaScript?
- Малоизвестные функции JavaScript
- Условный JavaScript для экспертов
Как удалить определенный элемент из массива js
Правильным способом удаления элемента из массива будет использование метода splice() . Этот метод принимает три аргумента, но нам нужны только первые два из них. Это индекс начиная с которого мы хотим удалить элементы. А также количество элементов, которые будут удалены из массива. Взгляните на пример ниже:
const letters = ["a", "b", "c"]; const index = 1; array.splice(index, 2); console.log(letters); // => [ 'a' ]
18 октября 2022
Часто бывает в задачах, что нам требуется удалить из массива определенный элемент.
Один из способов — это воспользоваться функцией высшего порядка filter:
// К примеру, дан массив из чисел: const numbers = [1, 2, 3, 4, 5]; //необходимо удалить элемент, который равен трём. const numberToDelete = 3; //фильтруем исходный массив. //А для того, чтобы его не мутировать, присвоим его в новую переменную. const filteredNumbers = numbers.filter((number) => number !== numberToDelete); console.log(filteredNumbers); // => [1, 2, 4, 5] //Готово!
Также есть самый явный способ для удаления элемента массива с помощью ключевого слова delete:
let fruits = ['banana', 'orange', 'apple']; //Допустим, что нам нужно удалить нулевой элемент массива. delete fruits[0]; console.log(fruits); // => [ , 'orange', 'apple' ]
Обратите внимание, что на месте нулевого элемента осталось пустое место. Как правило, удалять элемент массива таким способом не является хорошей практикой. Данный способ приведен в качестве примера.
Если вам нужно удалить последний элемент массива, для этого есть способ — это метод pop(). Перейдём к примеру:
const fruits = ['banana', 'orange', 'apple']; fruits.pop(); console.log(fruits); // получаем => [ 'banana', 'orange' ]
Но это еще не всё!
Одним из наиболее удобных методов для удаления элемента массива является метод splice():
const names = ['John', 'Darina', 'Mark', 'Kris']; //допустим, что дан массив имён. // Нам необходимо удалить из массива второй элемент. names.splice(2, 1); // начиная со второго элемента удаляем один элемент console.log(names); // => [ 'John', 'Darina', 'Kris' ]
Это не все способы удаления элементов из массива, но и среди указанных можно найти метод по душе или же придумать что-то свое.
Документация:
- Функция высшего порядка filter
- Метод splice()
- Метод pop()
Как удалить элемент из массива в JavaScript
Перевод статьи «Remove element from an array».

Удалить один или большее число элементов из уже существующего массива — распространенная задача в программировании. В JavaScript есть несколько вариантов ее решения, от простых до более сложных. Выбор подходящего решения зависит от ваших нужд. Нужно ли вам решение, изменяющее исходный массив? Надо ли удалить элемент по значению или по индексу? Нужно убрать один или несколько элементов? В общем, давайте посмотрим, какие у нас есть варианты.
Удаление любого элемента при помощи метода filter

Метод filter() — самое универсальное решение. С его помощью можно удалить как один, так и несколько элементов, причем хоть по значению, хоть по индексу. Это неизменяемое решение. С его помощью, собственно, не элемент удаляется, а создается новый массив, из которого отфильтровываются нежелательные элементы. Этот метод широко поддерживается, даже в Internet Explorer. Совместимость можно проверить здесь.
Метод filter() принимает в качестве параметра функцию обратного вызова, которая будет вызываться со следующими аргументами:
- Значение (value) элемента (этот аргумент обязательный).
- Индекс (index) элемента — опционально.
- Исходный массив — тоже опционален.
Результирующий массив будет содержать элементы, для которых возвращаемое значение callback-функции будет истинным.
let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter(myFilter); function myFilter(value) < return value < 3 || value >4; >
Метод filter() можно применять в компактном виде — с использованием стрелочных функций. Это можно делать, если для вас не важна поддержка IE.
let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter((value, index) => index !== 2);
Удаление конкретного объекта

Даже если ваш массив содержит объекты, а не базовые типы данных, метод filter() все равно сработает. Просто нужно определить callback-функцию соответствующим образом.
let originalArray = [ , , ]; let filteredArray = originalArray.filter(value => value.age > 18);
Удаление первого элемента

Пожалуй, самый простой вариант удаления элемента из массива — удаление первого элемента. Для примера можно взять FIFO-очередь. В этом случае для удаления первого элемента можно воспользоваться методом shift(). Этот метод возвращает удаленный элемент, так что вы сможете как-то его обработать при желании. В отличие от filter(), метод shift() изменяет исходный массив.
let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.shift();
Удаление последнего элемента

Очень похожий вариант, только для случаев удаления элемента из LIFO-стека. Для удаления последнего элемента массива можно использовать метод pop(). Работает он аналогично методу shift(), который мы разбирали в предыдущем разделе.
let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.pop(); // myArray: 1,2,3,4
Удаление конкретного элемента по индексу

Если вы хотите удалить из массива какой-то определенный элемент, можно воспользоваться методом splice(). Этот метод умеет не только удалять элементы, но и добавлять новые.
При помощи метода splice() можно удалить и больше одного элемента за раз. Для этого в качестве первого параметра укажите начальный индекс. Вторым параметром идет число элементов, которые вы хотите удалить. Этот второй параметр опционален. Если вы его не укажете, метод удалит указанный в первом параметре элемент, а также все элементы справа от него.
// splice(2) example let myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2); console.log("After splice(2): " + myArray); // splice(2, 1) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 1); console.log("After splice(2, 1): " + myArray); // splice(2, 2) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 2); console.log("After splice(2, 2): " + myArray);
Поскольку метод splice() использует индексы массива, если вы захотите удалить элемент по значению, сначала придется найти его индекс.
Использование delete

Использование метода delete может быть очевидным, но он работает не так, как вы, вероятно, ожидаете. Он не удаляет элемент, а стирает его значение. Длина массива останется той же, а на позиции, которую вы очистили, будет неопределенное значение.
let myArray = [1, 2, 3, 4, 5]; delete(myArray[2]); // Result: 1,2,,4,5
Как удалить элемент массива с определенным значением?
Есть переменная edinica = 1 . Как удалить элементы массива со значением value :’b’ при условии, что переменная edinica = 1 ?
Отслеживать
задан 27 июл 2020 в 19:08
1 1 1 серебряный знак 1 1 бронзовый знак
Посмотрите на метод filter у Array. Вот пример использования developer.mozilla.org/ru/docs/Web/JavaScript/Reference/…
27 июл 2020 в 19:13
Поправил свой ответ, теперь там всё нормально
27 июл 2020 в 20:03
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно написать всё самому, вручную
const arr = [ , , , , ]; function cycle(arr) < for (let i = 0; i < arr.length; i++) < // пройтись по все элементам массива if (typeof(arr[i]) === 'object' && arr[i].value === 'b') < // если элемент массива является объектом, и у этого объекта поле value равняется 'b' и является строкой arr.splice(i, 1); // удалить элемент из массива i--; // уменьшить итератор на единицу >> return arr; // вернуть массив как результат выполнения функции > let number = 1; let newArr; if (number === 1) < // если переменная number равняется 1 и является числом, то выполнять код newArr = cycle(arr); // newArr равняется результату выполнения функции cycle console.log(newArr); >
Или можно использовать функцию filer , которая встроена в массивы JavaScript:
const arr = [ , , , , ]; let number = 1; let newArr; if (number === 1) < // если переменная number равняется 1 и является числом, то выполнять код newArr = arr.filter((item) =>typeof(item) === 'object' && item.value !== 'b'); // отфильтровать массив, в котором подходить под условие будут только те объекты у которых поле value не равняется 'b' и не является строкой console.log(newArr); >