L' delete
operatore viene utilizzato per rimuovere proprietà dagli oggetti.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Si noti che, per gli array, ciò non equivale alla rimozione di un elemento . Per rimuovere un elemento da un array, utilizzare Array#splice
o Array#pop
. Per esempio:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Dettagli
delete
in JavaScript ha una funzione diversa da quella della parola chiave in C e C ++: non libera direttamente la memoria. Invece, il suo unico scopo è rimuovere le proprietà dagli oggetti.
Per gli array, l'eliminazione di una proprietà corrispondente a un indice crea un array sparse (ovvero un array con un "buco" al suo interno). La maggior parte dei browser rappresenta questi indici di array mancanti come "vuoti".
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Si noti che delete
non si trasferisce array[3]
in array[2]
.
Diverse funzioni integrate in JavaScript gestiscono le matrici sparse in modo diverso.
for...in
salterà completamente l'indice vuoto.
for
Verrà restituito un ciclo tradizionale undefined
per il valore nell'indice.
Qualsiasi metodo utilizzato Symbol.iterator
restituirà undefined
il valore nell'indice.
forEach
, map
E reduce
sarà semplicemente ignorare l'indice mancante.
Pertanto, l' delete
operatore non deve essere utilizzato per il caso d'uso comune di rimozione di elementi da un array. Gli array dispongono di metodi dedicati per la rimozione di elementi e la riallocazione della memoria: Array#splice()
e Array#pop
.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice
muta l'array e restituisce tutti gli indici rimossi. deleteCount
gli elementi vengono rimossi dall'indice start
e item1, item2... itemN
inseriti nell'array dall'indice start
. Se deleteCount
viene omesso, gli elementi da startIndex vengono rimossi fino alla fine dell'array.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
C'è anche un nome simile, ma diverso, funzione Array.prototype
: Array#slice
.
Array # slice ([inizio [, fine]])
Array#slice
non è distruttivo e restituisce un nuovo array contenente gli indici indicati da start
a end
. Se end
non specificato, viene impostato automaticamente alla fine dell'array. Se end
è positivo, specifica l' indice non inclusivo in base zero a cui fermarsi. Se end
è negativo, specifica l'indice a cui fermarsi contando alla fine dell'array (es. -1 ometterà l'indice finale). Se end <= start
, il risultato è un array vuoto.
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
rimuove l'ultimo elemento da un array e restituisce quell'elemento. Questa operazione modifica la lunghezza dell'array.