2009-09-06 4 views
61

Beiwie von Hash in Javascript

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

Taste + Wert zu entfernen, wie ich key2 und object 2 aus dem Hash entferne, dass es in einem Zustand endet, als ob ich tat:

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

löschen tut nicht, was ich will;

delete myHash['key2'] 

einfach gibt mir dies:

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

die einzigen Dokumente i auf splice und slice Deal mit Integer-Indexer finden, die ich nicht haben.

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

UPDATE

OK leichte Ablenkungsmanöver, löschen scheint zu tun, was ich auf der Oberfläche möge, jedoch im json2.js mit meinem Objekt json stringify für an den Server zurückschieben,

nach ive gelöscht, wird myHash serialisiert als:

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

Ist das ein Fehler in json2.js? oder macht es etwas falsches mit löschen?

Dank

+3

Was Sie tun, ist das Hinzufügen von Eigenschaften zu einem Objekt, die anders als das Hinzufügen von Elementen zu einem Array/Hash ist. 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. –

+2

Wenn es eine Hashtabelle ist, sollten Sie 'var myHash = new Object()' anstelle von 'var myHash = new Array()' verwenden. – cprcrack

Antwort

150

Sie suchen delete:

delete myhash['key2'] 

die Core Javascript Guide

+1

Ich dachte, das war richtig, deshalb habe ich es zuerst versucht. Es funktioniert _seem_ zu arbeiten, liegt mein Problem tatsächlich in Json.stringify, schlecht aktualisieren Sie die Frage –

+6

verwenden Sie stattdessen die Spleißfunktion. Löschen lässt ein Loch im Array. –

+0

Das funktioniert für mich. Vielen Dank! –

1
Siehe

Eine andere Möglichkeit diese John Resig remove method sein kann. kann besser passen, was Sie brauchen. wenn Sie den Index im Array kennen.

+2

Nun, nicht mit dem Index ist genau das, was die Frage lautet –

+0

Hey @AndrewBullock Ich habe eine Abfrage bekomme ich JSON-Array Beispiel: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \ "}], aber ich möchte wie [{" DE ":" 3 "}] so erhalten, aber ich bekomme diese Ausgabe nicht Bitte helfen Sie mir –

11

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

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

+4

Ich mag überhaupt nicht neu. Ich bevorzuge var myHash = []; – Nosredna

+10

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

+0

@Nosredna stimme völlig zu :) –

6

Sie sagen, Sie wissen nicht unbedingt, dass 'key2' in Position [1] ist. Nun, ist es nicht. Position 1 wäre besetzt mit myHash [1].

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

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

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

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

Sie sind richtig, danke :) siehe meine Antwort –

Verwandte Themen