Editado em outubro de 2016
- Faça de forma simples, intuitiva e explícita (a navalha de Occam )
- Imutável (a matriz original permanece inalterada)
- Faça isso com funções JavaScript padrão, se o seu navegador não as suportar - use polyfill
Neste exemplo de código, uso a função "array.filter (...)" para remover itens indesejados de uma matriz. Esta função não altera a matriz original e cria uma nova. Se o seu navegador não suportar esta função (por exemplo, Internet Explorer antes da versão 9 ou Firefox antes da versão 1.5), considere usar o polyfill de filtro do Mozilla .
Removendo item (código ECMA-262 Edition 5, também conhecido como JavaScript à moda antiga)
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 ]
Removendo item (código ECMAScript 6)
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
IMPORTANTE A sintaxe da função de seta ECMAScript 6 "() => {}" não é suportada no Internet Explorer, Chrome antes da versão 45, Firefox antes da versão 22 e Safari antes da versão 10. Para usar a sintaxe do ECMAScript 6 em navegadores antigos, você pode usar o BabelJS .
Removendo vários itens (código ECMAScript 7)
Uma vantagem adicional desse método é que você pode remover vários itens
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 ]
A função "array.includes (...)" IMPORTANTE não é suportada no Internet Explorer, Chrome antes da versão 47, Firefox antes da versão 43, Safari antes da versão 9 e Safari antes da versão 9 e Edge antes da versão 14, então aqui está o polyfill do Mozilla .
Removendo vários itens (no futuro, talvez)
Se a proposta "Esta sintaxe de ligação" for aceita, você poderá fazer o seguinte:
// 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 ]
Tente você mesmo no BabelJS :)
Referência