2014-01-07 15 views
5

Ich habe ein JSON-Array und ich versuche, es nach Wert zu sortieren. Das Problem, das ich habe, ist, dass ich nicht in der Lage bin, die JSON-Struktur mit meiner Sortierung zu behalten.Sortieren Sie ein JSON-Array-Objekt mit Javascript nach Wert

Hier ist die JSON-Array:

{ 
    caffeineoverdose: '2517', 
    workhardplayhard: '761277', 
    familia: '4633452' 
} 

ich so etwas wie dies möchte:

{ 
    familia: '4633452', 
    workhardplayhard: '761277', 
    caffeineoverdose: '2517 
} 
+3

Entweder haben Sie eine Zeichenfolge im JSON-Format, ein Array oder höchstwahrscheinlich ein normales JavaScript-Objekt? Welches ist es ? – adeneo

+2

Es ist kein Array. Es ist ein Objekt. – Eimantas

+1

Sie können ein Objekt nicht sortieren ... aber Sie können eine Funktion erstellen und diese Werte in ein Array eingeben .. dann sortieren. – cocco

Antwort

14

Hier ist alles was Sie brauchen.

Wie ich schon sagte in den Kommentaren können Sie ein Objekt nicht sortieren .. aber Sie können es in ein Array setzen und die Ergebnisse anzeigen.

var array=[],obj={ 
caffeineoverdose:'2517', 
workhardplayhard:'761277', 
familia:'4633452' 
}; 
for(a in obj){ 
array.push([a,obj[a]]) 
} 
array.sort(function(a,b){return a[1] - b[1]}); 
array.reverse(); 

DEMO

http://jsfiddle.net/GB23m/1/

+0

DIESE WORKED! DANK :) – basic1point0

+4

Anstatt 'array.reverse()' zu benutzen, können Sie gerade die Sortierfunktion in 'b [1] - a [1]' ändern. –

6

Das ist nicht JSON ist, und es ist kein Array. Es ist ein normales JavaScript-Objekt und Sie können den Eigenschaften eines Objekts keine Reihenfolge auferlegen.

Wenn Sie die Reihenfolge der Elemente beibehalten möchten, müssen Sie ein Array (auch dies ist nicht JSON, es ist JavaScript):

[ [ 'familia', '4633452'] , 
    [ 'workhardplayhard', '761277'], 
    [ 'caffeineoverdose', '2517'] 
] 
+1

Um hinzuzufügen, können Sie das Objekt sortiert schreiben, und Sie können es auf dem Bildschirm sortiert angezeigt haben, aber sobald es als ein Objekt definiert ist, verlieren Sie die Reihenfolge. Siehe http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – brandonscript

6

Sie es in ein Array von Objekten umwandeln könnte:

[{ name: 'caffeineoverdose', number: '2517' }, {name: 'workhardplayhard', number: '761277'}, {name: 'familia', number: '4633452'}] 

und dann sortieren nach id

array.sort(function(a,b){ 
    return a.number - b.number; 
    } 
);