Angenommen, ich habe diesen Code:
var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
Wenn ich nun "Nachname" entfernen wollte? .... gibt es ein Äquivalent von
myArray["lastname"].remove()
?
(Ich brauche das Element weg, weil die Anzahl der Elemente wichtig ist und ich die Dinge sauber halten möchte.)
"Test" + {};
ist eine perfekt gültige JS-Anweisung.Antworten:
Objekte in JavaScript können als assoziative Arrays betrachtet werden, die Schlüssel (Eigenschaften) Werten zuordnen.
Um eine Eigenschaft aus einem Objekt in JavaScript zu entfernen, verwenden Sie den
delete
Operator:Beachten Sie, dass Sie beim
delete
Anwenden auf eine Indexeigenschaft von ein dünn besiedeltes ArrayArray
erstellen (dh ein Array mit einem fehlenden Index).Wenn Sie mit Instanzen von arbeiten
Array
und kein dünn besiedeltes Array erstellen möchten - und dies normalerweise nicht -, sollten SieArray#splice
oder verwendenArray#pop
.Beachten Sie, dass der
delete
Operator in JavaScript den Speicher nicht direkt freigibt. Der Zweck besteht darin, Eigenschaften von Objekten zu entfernen. Wenn eine zu löschende Eigenschaft den einzigen verbleibenden Verweis auf ein Objekt enthälto
,o
wird der Müll anschließend auf normale Weise gesammelt.Die Verwendung von
delete
Operator kann JavaScript - Engine die Fähigkeit beeinflussen optimize Code .quelle
delete myArray[0]
. Siehe stackoverflow.com/a/9973592/426379 und Löschen von Array-Elementenlength
Eigenschaft eines Array-Objekts bleibt unverändert.myArray
es wirklich als Array verwendet würde - aber es ist kein (myArray
unglücklicher Name), es ist ein Objekt. In diesem Falldelete
ist es also in Ordnung. Beachten Sie, dass es auch dannnew Array()
in Ordnung ist , wenn es als assoziatives Array erstellt und verwendet wird. Ihre Warnung ist immer noch zu beachten, wenn Sie echte Arrays verwenden.Alle Objekte in JavaScript werden als Hashtabellen / assoziative Arrays implementiert. Das Folgende ist also das Äquivalent:
Und wie bereits erwähnt, "entfernen" Sie eine Eigenschaft aus einem Objekt über das
delete
Schlüsselwort, das Sie auf zwei Arten verwenden können:Hoffe die zusätzlichen Infos helfen ...
quelle
myObj['some;property']
funktioniert,myObj.some;property
würde aber nicht (aus offensichtlichen Gründen). Es ist auch möglicherweise nicht offensichtlich, dass Sie eine Variable in der Klammer-Notation verwenden können, dhvar x = 'SomeProperty'; alert(myObj[x])
Keine der vorherigen Antworten befasst sich mit der Tatsache, dass Javascript zunächst keine assoziativen Arrays hat - es gibt keinen
array
Typ als solchen, siehetypeof
.Was Javascript hat, sind Objektinstanzen mit dynamischen Eigenschaften. Wenn Eigenschaften mit Elementen einer Array-Objektinstanz verwechselt werden, muss Bad Things ™ passieren:
Problem
Lösung
Verwenden Sie: Eine universelle Entfernungsfunktion, die Sie nicht in die Luft jagt:
quelle
Array
s in JS sind Objekte, versuchen Sietypeof new Array();
odertypeof []
überprüfen Sie.Array
ist einfach eine bestimmte Art von Objekt und überhaupt kein "anderes Tier". In JS werden Objekte durch ihren Konstruktornamen und ihre Prototypkette unterschieden (siehe Prototypbasierte Programmierung) .delete
in Bezug auf dieArray
Bereitstellung einer einfachen polymorphen Funktion anzusprechen .delete
hat keinen Mangel.delete
dient zum Entfernen von Eigenschaften. Das ist es. Durch Anwenden des Löschoperators auf einen Index eines Arrays wird dieser Index entfernt. Was muss es noch tun? Sie haben ein spärliches Array, das ein Merkmal der Sprache ist. Wenn Sie kein Array mit geringer Dichte möchten, löschen Sie den Index nicht: usesplice
orpop
.Durch das Entfernen wird nur das Objekt gelöscht, die Array-Länge bleibt jedoch gleich.
Zum Entfernen müssen Sie Folgendes tun:
quelle
Während die akzeptierte Antwort korrekt ist, fehlt die Erklärung, warum sie funktioniert.
Zunächst sollte Ihr Code die Tatsache widerspiegeln, dass dies KEIN Array ist:
Beachten Sie, dass alle Objekte (einschließlich
Array
s) auf diese Weise verwendet werden können. Erwarten Sie jedoch nicht, dass Standard-JS-Array-Funktionen (Pop, Push, ...) an Objekten funktionieren!Wie in der akzeptierten Antwort angegeben, können Sie dann
delete
die Einträge von Objekten entfernen:Sie sollten entscheiden, welche Route Sie nehmen möchten - entweder Objekte (assoziative Arrays / Wörterbücher) oder Arrays (Karten) verwenden. Mischen Sie niemals die beiden.
quelle
Verwenden Sie die Methode
splice
, um Elemente vollständig aus einem Objektarray zu entfernen:quelle
Wie andere Antworten bereits festgestellt haben, verwenden Sie kein Javascript-Array, sondern ein Javascript-Objekt, das in anderen Sprachen fast wie ein assoziatives Array funktioniert, mit der Ausnahme, dass alle Schlüssel in Zeichenfolgen konvertiert werden. Die neue Karte speichert Schlüssel als ihren ursprünglichen Typ.
Wenn Sie ein Array und kein Objekt hatten, können Sie die Filterfunktion des Arrays verwenden , um ein neues Array ohne das zu entfernende Element zurückzugeben:
Wenn Sie einen älteren Browser und jQuery haben, verfügt jQuery über eine
$.grep
Methode , die ähnlich funktioniert:quelle
Im Airbnb Style Guide gibt es eine elegante Möglichkeit, dies zu tun (ES7):
Copyright: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
quelle
Wenn Sie Object verwenden, haben Sie zunächst kein assoziatives Array. Bei einem assoziativen Array sieht das Hinzufügen und Entfernen von Elementen folgendermaßen aus:
quelle
Sie können einen Eintrag aus Ihrer Karte entfernen, indem Sie ihn explizit 'undefined' zuweisen. Wie in Ihrem Fall:
quelle
Wenn aus irgendeinem Grund der Löschschlüssel nicht funktioniert (als ob er bei mir nicht funktioniert hätte)
Sie können es herausspleißen und dann die undefinierten Werte filtern
Versuchen Sie nicht, sie zu verketten, da der Spleiß entfernte Elemente zurückgibt.
quelle
Wir können es auch als Funktion verwenden. Angular löst einen Fehler aus, wenn er als Prototyp verwendet wird. Danke @HarpyWar. Es hat mir geholfen, ein Problem zu lösen.
quelle
Es ist sehr einfach, wenn Sie die Abhängigkeit von underscore.js in Ihrem Projekt haben -
quelle
Mit dem
"delete"
Schlüsselwort wird das Array-Element in Javascript aus dem Array gelöscht.Zum Beispiel,
Betrachten Sie die folgenden Aussagen.
In der letzten Zeile des Codes wird das Array-Element, dessen Schlüssel "Status" ist, aus dem Array entfernt.
quelle
Ohne Schleifen / Iterationen erhalten wir das gleiche Ergebnis
quelle
Für "Arrays":
Wenn Sie den Index kennen:
Wenn Sie den Wert kennen:
Die am besten bewertete Antwort für
delete
funktioniert gut bei Objekten, aber nicht für echte Arrays. Wenn ich es benutzedelete
, werden Elemente aus Schleifen entfernt, das Element bleibt jedoch unverändertempty
und die Länge des Arrays ändert sich nicht. Dies kann in einigen Szenarien ein Problem sein.Wenn ich zum Beispiel myArray.toString () auf myArray nach dem Entfernen über mache
delete
, wird ein leerer Eintrag erstellt, dh ,,quelle
Die einzige Arbeitsmethode für mich:
Verwendungszweck:
quelle