Рубрики
Без рубрики

Как удалить элемент из массива в JavaScript

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

Вот несколько способов удалить элемент из массива с помощью JavaScript .

Все описанные методы не изменяют исходный массив , а вместо этого создают новый.

Если вы знаете индекс элемента

Предположим, у вас есть массив, и вы хотите удалить элемент в позиции i .

Один из методов заключается в использовании slice() :

const items = ['a', 'b', 'c', 'd', 'e', 'f']
const i = 2
const filteredItems = items.slice(0, i).concat(items.slice(i + 1, items.length))
// ["a", "b", "d", "e", "f"]

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

Если вы знаете цену

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

const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(item => item !== valueToRemove)
// ["a", "b", "d", "e", "f"]

При этом используются функции стрелок ES6. Вы можете использовать традиционные функции для поддержки старых браузеров:

const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(function(item) {
  return item !== valueToRemove
})
// ["a", "b", "d", "e", "f"]

или вы можете использовать Babel и перенести код ES6 обратно в ES5, чтобы сделать его более удобоваримым для старых браузеров, но при этом написать в своем коде современный JavaScript.

Удаление нескольких элементов

Что делать, если вместо одного элемента вы хотите удалить много элементов?

Давайте найдем самое простое решение.

По индексу

Вы можете просто создать функцию и последовательно удалять элементы:

const items = ['a', 'b', 'c', 'd', 'e', 'f']

const removeItem = (items, i) =>
  items.slice(0, i-1).concat(items.slice(i, items.length))

let filteredItems = removeItem(items, 3)
filteredItems = removeItem(filteredItems, 5)
//["a", "b", "d", "e"]

По значению

Вы можете искать включение внутри функции обратного вызова:

const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valuesToRemove = ['c', 'd']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
// ["a", "b", "e", "f"]

Избегайте изменения исходного массива

splice() (не путать с slice() ) изменяет исходный массив, и его следует избегать.

Оригинал: “https://flaviocopes.com/how-to-remove-item-from-array/”