2017-12-20 3 views
0

Ich habe eine v-for, die Nachrichten in einer JSON-Antwort durchlaufen und sie auf dem Bildschirm drucken wird. Die Nachrichten kommen vom Server in chronologischer Reihenfolge, aber wenn ich die Daten über das Vue Chrome-Add-In ansehe, werden die Daten alphabetisch nachbestellt.VueJS2 Sortierung JSON

Ich habe ein einfaches Beispiel.

Hier ist die angeforderte JSON über Postman:

{ 
    "e": "e", 
    "d": "d", 
    "c": "c", 
    "b": "b", 
    "a": "a" 
} 

Hier wird das gleiche Ergebnis ist, wenn ich den Anruf über Vue machen und machen v-für die Verwendung:

data:Object 
a:"a" 
b:"b" 
c:"c" 
d:"d" 
e:"e" 

Die Frage ist also, kann ich Vue davon abhalten, meine Daten neu zu ordnen? Wenn nicht, wie soll ich es dann richtig anordnen?

+0

Die Reihenfolge der Schlüssel in einem Objekt ist nicht garantiert, es wird durch die Iterationsmethode diktiert oder überhaupt nicht. Normalerweise ist es am besten, ein Objekt nicht zu verwenden, wenn die Sortierreihenfolge wichtig ist. –

+0

JSON-Objekte haben keine bestimmte Reihenfolge, und es ist nicht garantiert, dass sie die Reihenfolge beibehalten, in der Sie Objekte einfügen. Ich würde stattdessen vorschlagen, ein Array anstelle eines Objekts zu übergeben und dann bei Bedarf zu konvertieren. –

Antwort

2

Wie die Kommentatoren festgestellt haben, ist die Reihenfolge der Schlüssel in einem Objekt nicht garantiert. Daher ist es am besten, wenn der Server Nachrichten in einer geordneten Struktur (wie ein Array) ausgibt.

Wenn das nicht möglich ist, ich habe festgestellt, dass die Schlüssel um allgemein in einem Objekt erstellt auf einmal (wie Ihre JSON-Daten) erhalten ist. Object.keys(data), erhalten Sie eine Reihe von Schlüssel das ist wahrscheinlich in der ursprünglichen Reihenfolge.

Anstatt also so etwas wie

<div v-for="value in data"> 

tun

<div v-for="key in Object.keys(data)"> 

und dann data[key], um den Wert zu erhalten.

Sie können auch versuchen Object.entries je nachdem, ob Sie IE-Unterstützung benötigen.

Wenn dies weit verbreitet sein wird, erwarten Sie, dass es irgendwann für jemanden bricht. Wenn Sie nur etwas brauchen, das für Sie arbeitet, könnte dies dies tun.

+0

Danke, das hat perfekt funktioniert. Es ist wirklich eine Schande, dass es scheint nicht eine elegantere Art, dies zu tun .. Scheint es ist etwas Vue tut, als ob ich versuche, eine ähnliche Operation mit jquery zu tun es bewahrt seine Reihenfolge vom Server .. trotzdem danke nochmal – Brad