El delete
operador se utiliza para eliminar propiedades de los objetos.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Tenga en cuenta que, para las matrices, esto no es lo mismo que eliminar un elemento . Para eliminar un elemento de una matriz, use Array#splice
o Array#pop
. Por ejemplo:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Detalles
delete
en JavaScript tiene una función diferente a la de la palabra clave en C y C ++: no libera memoria directamente. En cambio, su único propósito es eliminar propiedades de los objetos.
Para las matrices, al eliminar una propiedad correspondiente a un índice, se crea una matriz dispersa (es decir, una matriz con un "agujero"). La mayoría de los navegadores representan estos índices de matriz faltantes como "vacíos".
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Tenga en cuenta que delete
no se traslada array[3]
a array[2]
.
Las diferentes funciones integradas en JavaScript manejan matrices dispersas de manera diferente.
for...in
saltará el índice vacío por completo.
Un for
bucle tradicional devolverá undefined
el valor en el índice.
Cualquier método que use Symbol.iterator
devolverá undefined
el valor en el índice.
forEach
, map
y reduce
simplemente omitirá el índice que falta.
Por lo tanto, el delete
operador no debe usarse para el caso de uso común de eliminar elementos de una matriz. Las matrices tienen métodos dedicados para eliminar elementos y reasignar memoria: Array#splice()
y Array#pop
.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice
muta la matriz y devuelve los índices eliminados. deleteCount
los elementos se eliminan del índice start
y item1, item2... itemN
se insertan en la matriz del índice start
. Si deleteCount
se omite, los elementos de startIndex se eliminan al final de la matriz.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
También hay un nombre similar, pero diferente, la función de Array.prototype
: Array#slice
.
Array # slice ([comienzo [, fin]])
Array#slice
no es destructivo y devuelve una nueva matriz que contiene los índices indicados de start
a end
. Si no end
se especifica, el valor predeterminado es el final de la matriz. Si end
es positivo, especifica el índice no inclusivo basado en cero para detenerse. Si end
es negativo, especifica el índice para detenerse contando desde el final de la matriz (por ejemplo, -1 omitirá el índice final). Si end <= start
, el resultado es una matriz vacía.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Array # pop
Array#pop
elimina el último elemento de una matriz y devuelve ese elemento. Esta operación cambia la longitud de la matriz.