2016-05-09 9 views
0

enter image description hereJSON.stringify gibt falsche Indexstruktur

Ich versuche JSON.strigify() auf mein Objekt zu verwenden (siehe Screenshot).

Allerdings bekomme ich Ergebnis, das ich nicht erwarte, Objekt-Indizes sind in falscher Reihenfolge.

Vollzeichenfolge json, können Sie hier sehen: http://vpaste.net/LqNlq

Wie Sie erste Index ist 9:0 sehen kann, aber nicht 8:0 wie erwartet.

Was ist das Problem hier?

+3

Im Gegensatz zu Arrays sind Objekteigenschaften nicht in einer vorhersagbaren Reihenfolge angeordnet. Jeder Browser hat seinen eigenen Weg und Sie können sich nicht auf diese Reihenfolge verlassen. Sie können ein Objekt nicht _sort_. – blex

+1

Sie sollten bei der Verwendung von Arrays nachsehen, die Reihenfolge der Objekteigenschaften ist nicht gewährleistet. http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – IrkenInvader

+0

Das ist höchstwahrscheinlich Chrome. –

Antwort

1

Die Schlüssel von Objekten in Javascript sind nicht garantiert in jeder Reihenfolge zu sein.

Sie sollten stattdessen ein Array von Objekten erstellen, um die Reihenfolge zu erhalten.

z.B.

{ 
    "1": [ 
    { "key": "8:0", ... }, 
    { "key": "8:30", ... }, 
    ... 
    ], 
    "2": ... 
} 

Dies sollte auch die gleiche Struktur, wenn Sie Ihre Top-Level-Tasten ("1", "2", etc.) erwarten, um iteriert werden.

+0

Alle MSIE-Versionen behalten die Reihenfolge der Einträge bei. Schnelle Möchtegerns nicht! Weil das ein natürlich erwartetes Verhalten ist. Das ist eine empirische Anforderung, wen interessiert es, wenn der Standard es nicht explizit angibt. Wenn die Implementierung eine entscheidende selbstverständliche Anforderung an die browseranbieterspezifische Implementierung hinterlässt, heißt das nicht, dass sie sie einfach mischen können, weil sie nicht ausdrücklich dazu verpflichtet sind, ihre Bestellung aufzubewahren. –

+2

Alles, was Sie gesagt haben, ist eine Frage der Meinung. Da Browser verschiedene Objektreihenfolgen haben können, ist es sogar ein weiterer Beweis dafür, dass Sie nicht über Objekte iterieren sollten. Verwenden Sie keine Objekte als assoziative Arrays. Es gibt mehrere logische Möglichkeiten, um Ihre Daten zu strukturieren. – MattDiamant

+1

@BekimBacaj - zu sagen, dass ein bestimmter Weg, es zu tun, eine "entscheidende selbst verstandene Anforderung" _ macht es nicht wahr. Ich habe ECMAScript für mehr als 10 Jahre programmiert, ohne dass ich jemals Eigenschaften für eine Bestellung benötige. Dinge mit Ordnungen werden in Arrays gehalten. Und _ "sie frei zu lassen, sie zu mischen" _ ist tatsächlich, im wörtlichsten Sinne, was es bedeutet, wenn die Spezifikation eine Bestellung nicht beschreibt. –