2017-01-22 4 views
-1

Es ist offensichtlich, dass ich nicht auf die Reihenfolge der Schlüssel-Wert-Paare in JSON verlassen kann. Zum Beispiel könnte ein JSON-ParserKann ich mich auf die Reihenfolge eines JSON-Arrays verlassen?

{ 
    "someKey" : "someValue", 
    "anotherKey" : "anotherValue", 
    "evenAnotherKey" : "evenAnotherValue" 
} 

als

{ 
    "anotherKey" : "anotherValue", 
    "someKey" : "someValue", 
    "evenAnotherKey" : "evenAnotherValue" 
} 

legal, interpretieren, aber konnte ich vertrauen auf die Bestellung eines JSON Array? Zum Beispiel könnte ein JSON-Parser

{ 
    "arrayKey" : ["firstElement", "secondElement", "thirdElement"] 
} 

als rechtlich

{ 
    "arrayKey" : ["secondElement", "firstElement1", "thirdElement"] 
} 

interpretieren? Ich würde nicht annehmen, aber mein Freund sagte mir, dass ich falsch war.

+0

Sie fragen nach JSON-Arrays, sprechen aber über JavaScript-Compiler. Haben Sie es mit JSON oder JavaScript zu tun? – Quentin

+0

@Quentin Ich meinte einen Parser. Ich werde die Frage bearbeiten. – Bennett

Antwort

1

Ja, Sie können! Arrays sind gemacht, so dass die Reihenfolge zählt! Das teilt Objekte von Arrays. Vor allem in JS und JSON.

0

Arrays und Listen sind immer geordnet. Das ist der Punkt, der Arrays und Listen hat - ihre Position ist ihr Index.


Übrigens, seit ES5 ist auch die Reihenfolge der Objekte (was Sie Schlüssel-Wert-Paare nennen) garantiert. Aber nicht auf direkte Art und Weise.

Bei Objekten wird jeder Schlüssel, der eine Nummer ist, vor nicht numerischen Schlüsseln geordnet und numerisch geordnet. Alle anderen Tasten sind jedoch garantiert in der Reihenfolge der Anzeigen. Also folgendes Objekt:

{ 
    hello : "world", 
    foo : "bar", 
    "22" : "first" 
} 

muss zurückgegeben werden, wie:

{ 
    "22" : "first", 
    hello : "world", 
    foo : "bar" 
} 

Aktuell alle Browser unterstützen dies und node.js unterstützen diese aber nicht alle JavaScript-Cross-Compiler (wie Babel) unterstützen.

Persönlich mag ich nicht ungeordnete Datenstrukturen wie Objekte wie bestellt behandeln. Aber es sieht so aus, als ob die js-Community anderer Meinung ist. Gehen Sie beispielsweise willkürlich in die Reihenfolge der Karten ein, um zu verhindern, dass Menschen sich auf eine zufällige stabile Reihenfolge aus einer Implementierung der Sprache verlassen.

Verwandte Themen