Отредактировано в октябре 2016
- Делайте это просто, интуитивно понятно и понятно (https://en.wikipedia.org/wiki/Occam%27s_razor)
- Сделать его неизменным (исходный массив остается неизменным)
- Делайте это со стандартными функциями JS, если ваш браузер их не поддерживает - используйте полифилл
В этом примере кода я использую функцию "array.filter (...)" для удаления ненужных элементов из массива, эта функция не меняет исходный массив и создает новый. Если ваш браузер не поддерживает эту функцию (например, IE до версии 9 или Firefox до версии 1.5), рассмотрите возможность использования фильтра polyfill из Mozilla .
Удаление элемента (код ECMA-262 Edition 5, также известный как oldstyle JS)
var value = 3
var arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(function(item) {
return item !== value
})
console.log(arr)
// [ 1, 2, 4, 5 ]
Удаление предмета (код ES2015)
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
ВАЖНО ES2015 "() => {}" Синтаксис функции стрелки не поддерживается в IE вообще, Chrome до 45 версии, Firefox до 22 версии, Safari до 10 версии. Чтобы использовать синтаксис ES2015 в старых браузерах, вы можете использовать BabelJS
Удаление нескольких элементов (код ES2016)
Дополнительным преимуществом этого метода является то, что вы можете удалить несколько элементов
let forDeletion = [2, 3, 5]
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!
console.log(arr)
// [ 1, 4 ]
ВАЖНО Функция "array.includes (...)" вообще не поддерживается в IE, Chrome до 47 версии, Firefox до 43 версии, Safari до 9 версии и Edge до 14 версии, так что вот полифилл от Mozilla
Удаление нескольких элементов (возможно, в будущем)
Если предложение "This-Binding синтаксис" когда-либо будет принято, вы сможете сделать это:
// array-lib.js
export function remove(...forDeletion) {
return this.filter(item => !forDeletion.includes(item))
}
// main.js
import { remove } from './array-lib.js'
let arr = [1, 2, 3, 4, 5, 3]
// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)
console.log(arr)
// [ 1, 4 ]
Попробуйте сами в BabelJS:)
Ссылка