O delete
operador é usado para remover propriedades dos objetos.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Observe que, para matrizes, isso não é o mesmo que remover um elemento . Para remover um elemento de uma matriz, use Array#splice
ou Array#pop
. Por exemplo:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Detalhes
delete
em JavaScript tem uma função diferente da palavra-chave em C e C ++: ela não libera memória diretamente. Em vez disso, seu único objetivo é remover propriedades dos objetos.
Para matrizes, a exclusão de uma propriedade correspondente a um índice cria uma matriz esparsa (isto é, uma matriz com um "furo" nela). A maioria dos navegadores representa esses índices de matriz ausentes como "vazios".
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Observe que delete
não é realocado array[3]
para array[2]
.
Diferentes funções internas no JavaScript lidam com matrizes esparsas de maneira diferente.
for...in
pulará o índice vazio completamente.
Um for
loop tradicional retornará undefined
para o valor no índice.
Qualquer método usando Symbol.iterator
retornará undefined
para o valor no índice.
forEach
, map
e reduce
simplesmente pulará o índice ausente.
Portanto, o delete
operador não deve ser usado para o caso de uso comum de remover elementos de uma matriz. As matrizes têm métodos dedicados para remover elementos e realocar memória: Array#splice()
e Array#pop
.
Matriz # emenda (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice
modifica a matriz e retorna todos os índices removidos. deleteCount
elementos são removidos do índice start
e item1, item2... itemN
inseridos na matriz do índice start
. Se deleteCount
for omitido, os elementos de startIndex serão removidos no final da 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]
Há também um nome semelhante, mas diferente, função em Array.prototype
: Array#slice
.
Matriz # fatia ([início [, fim]])
Array#slice
é não destrutivo e retorna uma nova matriz que contém os índices indicados de start
para end
. Se não end
for especificado, o padrão será o final da matriz. Se end
for positivo, especifica o índice não inclusivo baseado em zero no qual parar. Se end
for negativo, especifica o índice no qual parar, contando desde o final da matriz (por exemplo, -1 omitirá o índice final). Se end <= start
, o resultado é uma matriz vazia.
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]
Matriz # pop
Array#pop
remove o último elemento de uma matriz e retorna esse elemento. Esta operação altera o comprimento da matriz.