So entfernen Sie Schlüssel + Wert aus dem Hash in Javascript


78

Gegeben

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key2'] = { Name: 'Object 2' };
myHash['key3'] = { Name: 'Object 3' };

Wie entferne ich key2und object 2aus dem Hash, so dass es in einem Zustand endet, als ob ich es getan hätte:

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key3'] = { Name: 'Object 3' };

Löschen macht nicht was ich will;

delete myHash['key2'] 

gibt mir einfach folgendes:

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myhash['key2'] = null;
myHash['key3'] = { Name: 'Object 3' };

Die einzigen Dokumente, die ich finden spliceund slicemit ganzzahligen Indexern umgehen kann, die ich nicht habe.

Edit: Ich weiß auch nicht, dass 'key2' unbedingt in Position ist [1]

AKTUALISIEREN

OK, leicht roter Hering, Löschen scheint an der Oberfläche das zu tun, was ich will. Ich verwende jedoch json2.js, um mein Objekt mit json zu verbinden, damit es zurück zum Server verschoben werden kann.

Nach dem Löschen wird myHash wie folgt serialisiert:

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]

Ist das ein Fehler in json2.js? oder mache ich etwas falsch mit löschen?

Vielen Dank


3
Sie fügen einem Objekt Eigenschaften hinzu, die sich vom Hinzufügen von Elementen zu einem Array / Hash unterscheiden. Sie suchen nach einer Möglichkeit, eine Eigenschaft mehr oder weniger zu entfernen. Versuchen Sie, myHash.key1 zu löschen, wie in anderen Kommentaren erwähnt.
David Andres

2
Wenn es sich um eine Hashtabelle handelt, sollten Sie var myHash = new Object()anstelle von verwenden var myHash = new Array().
cprcrack

Antworten:


182

Sie suchen delete:

delete myhash['key2']

Weitere Informationen finden Sie im Core Javascript Guide


1
Ich dachte, das wäre richtig, deshalb habe ich es zuerst versucht. Es scheint zu funktionieren, mein Problem liegt tatsächlich in Json.stringify, ich werde die Frage aktualisieren
Andrew Bullock

8
Verwenden Sie stattdessen die Spleißfunktion. Löschen hinterlässt ein Loch im Array.
David Andres

2
Hier ist übrigens die oben erwähnte Spleißfunktion.
Per Lundberg

Dies ist nicht die beste Option, wenn die Änderungen an myhashnur im aktuellen Bereich erfolgen sollen. deletekann Nebenwirkungen haben, wenn sich Variablen an anderer Stelle auf das myhashObjekt beziehen .
Max Pleaner

Machte meinen Tag @ karim79 tysm

11

Warum verwenden Sie new Array();für Hash? Sie müssen new Object()stattdessen verwenden.

Und ich denke, Sie werden bekommen, was Sie wollen.


4
Ich mag überhaupt nichts Neues. Ich bevorzuge var myHash = [];
Nosredna

10
Oder in diesem Fall myHash = {}; :-)
Nosredna

Genau. Das einzige, was ein Array Ihnen gibt, ist eine Länge, die niemals funktioniert, wenn Sie den Indexer anders als ein int ändern.
Ihr Freund Ken

6

Sie sagen, Sie wissen nicht unbedingt, dass 'key2' in Position ist [1]. Nun, das ist es nicht. Position 1 würde von myHash [1] belegt.

Sie missbrauchen JavaScript-Arrays, die (wie Funktionen) Schlüssel- / Wert-Hashes zulassen. Obwohl JavaScript dies zulässt, bietet es Ihnen keine Möglichkeit, damit umzugehen, wie es eine Sprache für assoziative Arrays tun würde. Die Array-Methoden von JavaScript funktionieren nur mit den nummerierten Eigenschaften.

Das erste, was Sie tun sollten, ist zu Objekten anstatt zu Arrays zu wechseln. Sie haben keinen guten Grund, hier ein Array anstelle eines Objekts zu verwenden. Tun Sie es also nicht. Wenn Sie ein Array verwenden möchten, nummerieren Sie einfach die Elemente und geben Sie die Idee von Hashes auf. Die Absicht eines Arrays besteht darin, Informationen zu speichern, die numerisch indiziert werden können.

Sie können natürlich einen Hash (Objekt) in ein Array einfügen, wenn Sie möchten.

myhash[1]={"key1","brightOrangeMonkey"};

1

Eine andere Option kann diese Methode zum Entfernen von John Resig sein . kann besser passen, was Sie brauchen. wenn Sie den Index im Array kennen.


2
Nun, den Index nicht zu haben, ist genau das, was in der Frage steht
Andrew Bullock

Hey @AndrewBullock Ich habe eine Abfrage, bei der ich ein JSON-Array erhalte. Beispiel: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \"}], aber ich möchte wie [{"DE ":" 3 "}] gefällt mir, aber ich bekomme diese Ausgabe nicht. Bitte helfen Sie mir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.