El deleteoperador 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#spliceo Array#pop. Por ejemplo:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Detalles
deleteen 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 deleteno 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 forbucle tradicional devolverá undefinedel valor en el índice.
Cualquier método que use Symbol.iteratordevolverá undefinedel valor en el índice.
forEach, mapy reducesimplemente omitirá el índice que falta.
Por lo tanto, el deleteoperador 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#splicemuta la matriz y devuelve los índices eliminados. deleteCountlos elementos se eliminan del índice starty item1, item2... itemNse insertan en la matriz del índice start. Si deleteCountse 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#sliceno es destructivo y devuelve una nueva matriz que contiene los índices indicados de starta end. Si no endse especifica, el valor predeterminado es el final de la matriz. Si endes positivo, especifica el índice no inclusivo basado en cero para detenerse. Si endes 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#popelimina el último elemento de una matriz y devuelve ese elemento. Esta operación cambia la longitud de la matriz.