Editado en octubre de 2016
- Hazlo simple, intuitivo y explícito ( navaja de Occam )
- Hazlo inmutable (la matriz original permanece sin cambios)
- Hágalo con las funciones estándar de JavaScript, si su navegador no las admite: use polyfill
En este ejemplo de código, uso la función "array.filter (...)" para eliminar elementos no deseados de una matriz. Esta función no cambia la matriz original y crea una nueva. Si su navegador no es compatible con esta función (por ejemplo, Internet Explorer antes de la versión 9 o Firefox antes de la versión 1.5), considere usar el polyfill de filtro de Mozilla .
Eliminando elemento (código ECMA-262 Edición 5, también conocido como JavaScript de estilo antiguo)
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 ]
Eliminando elemento (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 La sintaxis de la función de flecha ECMAScript 6 "() => {}" no es compatible en absoluto con Internet Explorer, Chrome antes de la versión 45, Firefox antes de la versión 22 y Safari antes de la versión 10. Para usar la sintaxis de ECMAScript 6 en navegadores antiguos, puede usar BabelJS .
Eliminar varios elementos (código ECMAScript 7)
Una ventaja adicional de este método es que puede eliminar varios elementos
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 ]
IMPORTANTE: la función "array.includes (...)" no es compatible en absoluto con Internet Explorer, Chrome antes de la versión 47, Firefox antes de la versión 43, Safari antes de la versión 9 y Edge antes de la versión 14, así que aquí hay polyfill de Mozilla .
Eliminar múltiples elementos (en el futuro, tal vez)
Si alguna vez se acepta la propuesta de "esta sintaxis vinculante" , podrá hacer esto:
// 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 ]
Pruébalo tú mismo en BabelJS :)
Referencia