Вот несколько способов удалить элемент из массива, используя JavaScript .
Все описанные методы не изменяют исходный массив , а вместо этого создаютновый.
Если вам известен индекс элемента
Предположим, у вас есть массив, и вы хотите удалить элемент в позиции i
.
Oneметод должен использовать slice()
:
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const i = 3
const filteredItems = items.slice(0, i).concat(items.slice(i+1, items.length))
console.log(filteredItems)
slice()
создает новый массив с полученными индексами.Мы просто создаем новый массив от начала до индекса, который мы хотим удалить, и объединяем другой массив с первой позиции, следующей за той, которую мы удалили, до конца массива.
Если вам известно значение
В этом случае одним хорошим вариантом является использование filter()
, который предлагает более декларативный подход:
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(item => item !== valueToRemove)
console.log(filteredItems)
Используются функции стрелки ES6.Вы можете использовать традиционные функции для поддержки старых браузеров:
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(function(item) {
return item !== valueToRemove
})
console.log(filteredItems)
или вы можете использовать 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", "c", "d"]
console.log(filteredItems)
По значению
Вы можете искать включение внутри функции обратного вызова:
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valuesToRemove = ['c', 'd']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
// ["a", "b", "e", "f"]
console.log(filteredItems)
Избегайте изменения исходного массива
splice()
(не путать с slice()
) изменяет исходный массив, и его следует избегать.
(первоначально размещено на https://flaviocopes.com/how-to-remove-item-from-array/)