Es handelt sich um unterschiedliche Dinge, die unterschiedliche Zwecke verfolgen.
splice
ist array-spezifisch und entfernt, wenn es zum Löschen verwendet wird, Einträge aus dem Array y verschiebt alle vorherigen Einträge nach oben, um die Lücke zu füllen. (Sie kann auch zum Einfügen von Einträgen oder für beides gleichzeitig verwendet werden). splice
wird die length
des Arrays (vorausgesetzt, es handelt sich nicht um einen No-op-Aufruf: theArray.splice(x, 0)
).
delete
ist nicht array-spezifisch; es ist für die Verwendung auf Objekten konzipiert: Es entfernt eine Eigenschaft (Schlüssel/Wert-Paar) aus dem Objekt, für das Sie es verwenden. Es gilt nur für Arrays, weil standardmäßige (z.B. nicht typisierte) Arrays in JavaScript sind eigentlich gar keine Arrays *Es handelt sich um Objekte mit spezieller Behandlung bestimmter Eigenschaften, z. B. solche, deren Namen "Array-Indizes" sind (die definiert als String-Namen "...deren numerischer Wert i
liegt in dem Bereich +0 i < 2^32-1
") und length
. Wenn Sie delete
um einen Array-Eintrag zu entfernen, wird lediglich der Eintrag entfernt; andere Einträge, die darauf folgen, werden nicht nach oben verschoben, um die Lücke zu füllen, so dass das Array "spärlich" wird (es fehlen einige Einträge ganz). Es hat keinen Effekt auf length
.
In einigen der aktuellen Antworten auf diese Frage wird fälschlicherweise behauptet, dass die Verwendung von delete
" setzt den Eintrag auf undefined
". Das ist nicht richtig. Es beseitigt den Eintrag (die Eigenschaft) vollständig, so dass eine Lücke entsteht.
Zur Veranschaulichung der Unterschiede verwenden wir einen Code:
console.log("Using `splice`:");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length); // 5
a.splice(0, 1);
console.log(a.length); // 4
console.log(a[0]); // "b"
console.log("Using `delete`");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length); // 5
delete a[0];
console.log(a.length); // still 5
console.log(a[0]); // undefined
console.log("0" in a); // false
console.log(a.hasOwnProperty(0)); // false
console.log("Setting to `undefined`");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length); // 5
a[0] = undefined;
console.log(a.length); // still 5
console.log(a[0]); // undefined
console.log("0" in a); // true
console.log(a.hasOwnProperty(0)); // true
* (das ist ein Beitrag in meinem kleinen, blutarmen Blog)
4 Stimmen
Para
.splice
in Schleifen, werfen Sie einen Blick auf diese Frage: Löschen aus Array in Javascript .6 Stimmen
@andynormancx Ja, aber diese Antwort wurde erst einen Tag später gepostet und erhielt so viele Stimmen - ich würde sagen, sie ist besser geschrieben, das muss es sein.
0 Stimmen
@andynormancx - Es scheint kein exaktes Duplikat zu sein. Die Frage, die Sie verlinkt haben, fragt im Grunde, warum das Löschen eines Elements aus einem Array (wodurch es spärlich wird) dessen Länge nicht verringert. Diese Frage fragt nach den Unterschieden zwischen
delete
yArray.prototype.splice
.0 Stimmen
@chharvey stimmt zu, aber was noch wichtiger ist, wie kann diese Frage vor 9 Jahren gestellt worden sein! Ich komme mir alt vor, wenn ich hier wieder einen Kommentar abgebe.
0 Stimmen
JavaScript: die ersten 20 Jahre erwähnt "JavaScript 1.1 fügt die delete-, typeof- und void-Operatoren hinzu. In JavaScript 1.1 setzt der delete-Operator seinen Variablen- oder Objekt-Eigenschafts-Operanden einfach auf den Wert null. "& splice wurde in 1.2 hinzugefügt "Die Array-Funktionen push, pop, shift, unshift und splice wurden direkt den gleichnamigen Perl-Array-Funktionen nachempfunden."