Der delete
Operator wird verwendet, um Eigenschaften von Objekten zu entfernen.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Beachten Sie, dass dies für Arrays nicht mit dem Entfernen eines Elements identisch ist . Verwenden Sie Array#splice
oder, um ein Element aus einem Array zu entfernen Array#pop
. Zum Beispiel:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Einzelheiten
delete
in JavaScript hat eine andere Funktion als das Schlüsselwort in C und C ++: Es gibt keinen direkten Speicher frei. Stattdessen besteht der einzige Zweck darin, Eigenschaften von Objekten zu entfernen.
Wenn Sie für Arrays eine Eigenschaft löschen, die einem Index entspricht, wird ein Array mit geringer Dichte erstellt (dh ein Array mit einem "Loch" darin). Die meisten Browser stellen diese fehlenden Array-Indizes als "leer" dar.
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Beachten Sie, dass delete
nicht in verlagert array[3]
wird array[2]
.
Verschiedene in JavaScript integrierte Funktionen behandeln spärliche Arrays unterschiedlich.
for...in
überspringt den leeren Index vollständig.
Eine herkömmliche for
Schleife gibt undefined
den Wert am Index zurück.
Jede verwendete Methode Symbol.iterator
gibt undefined
den Wert am Index zurück.
forEach
, map
Und reduce
wird einfach die fehlenden Index überspringen.
Daher sollte der delete
Operator nicht für den allgemeinen Anwendungsfall des Entfernens von Elementen aus einem Array verwendet werden. Arrays verfügen über spezielle Methoden zum Entfernen von Elementen und zum Neuzuweisen von Speicher: Array#splice()
und Array#pop
.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]])
Array#splice
mutiert das Array und gibt alle entfernten Indizes zurück. deleteCount
Elemente werden aus dem Index entfernt start
, und item1, item2... itemN
werden in das Array von Index eingefügt start
. Wenn nicht deleteCount
angegeben, werden Elemente aus startIndex bis zum Ende des Arrays entfernt.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Es gibt auch eine ähnlich benannte, aber unterschiedliche Funktion für Array.prototype
: Array#slice
.
Array # Slice ([Anfang [, Ende]])
Array#slice
ist zerstörungsfrei und gibt ein neues Array zurück, das die angegebenen Indizes von start
bis enthält end
. Wenn end
nicht angegeben, wird standardmäßig das Ende des Arrays verwendet. Wenn dies end
positiv ist, wird der auf Null basierende nicht inklusive Index angegeben, bei dem gestoppt werden soll. Wenn end
es negativ ist, gibt es den Index an, bei dem angehalten werden soll, indem vom Ende des Arrays zurückgezählt wird (z. B. wird -1 den endgültigen Index weglassen). Wenn end <= start
, ist das Ergebnis ein leeres Array.
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
Entfernt das letzte Element aus einem Array und gibt dieses Element zurück. Diese Operation ändert die Länge des Arrays.