2013-01-08 10 views
16

Ich habe ein Objekt wie unten. Versuchen, es in aufsteigender Reihenfolge basierend auf Wert neu anzuordnen. Ähnlich wie bei der Javascript-Sortierung.Javascript Sortierung Schlüssel Wert Objekt auf der Grundlage von Wert

var masterList = { 
    "1": "google", 
    "2": "yahoo", 
    "3": "msn", 
    "4": "stackoverflow", 
    "5": "github", 
    "6": "jsfiddle", 
    "7": "amazon", 
    "8": "ebay" 
} 

Bitte lassen Sie mich die bessere Lösung kennen ...

+0

Dieser Beitrag würde Ihnen helfen, wie es zu tun, http://stackoverflow.com/questions/881510/json-sorting-in-jquery – Adil

+0

Versuchen masterList.sort() –

Antwort

44

JavaScript-Objekte keine Ordnung haben. Obwohl die meisten Browser in der gleichen Reihenfolge iterieren, in der die Eigenschaften erstellt wurden, gibt es keine Garantie. Daher wird die Sortierung für Objekte nicht unterstützt.

Sehen Sie hier für weitere Informationen: Does JavaScript Guarantee Object Property Order?

Sie auch was John Resig has got to say zu diesem Thema interessiert sein könnte.


Wenn Sie eine Art-able Liste benötigen, werden Sie es als ein Array von Objekten speichern müssen:

var masterList = [ 
    { key: 1, val: "google" }, 
    { key: 2, val: "yahoo" }, 
    { key: 3, val: "msn" }, 
    { key: 4, val: "stackoverflow" }, 
    { key: 5, val: "github" }, 
    { key: 6, val: "jsfiddle" }, 
    { key: 7, val: "amazon" }, 
    { key: 8, val: "ebay" } 
]; 

Dann, sie zu sortieren, verwenden Sie einfach die sort Methode der regelmäßigen Anordnung:

masterList = masterList.sort(function (a, b) { 
    return a.val.localeCompare(b.val); 
}); 

Hier ist die Geige: http://jsfiddle.net/ASrUD/

+0

vielen Dank – r1webs

+0

Vielleicht ‚ich nicht nur Ich verstehe sort(), aber das funktioniert nicht für numerische Werte. Der Versuch, nach 'Schlüssel' zu sortieren, gibt eine undefinierte Funktion zurück. – dval

+1

@ dval - Es ist die 'localeCompare', die dich abwirft. Wenn Sie nach 'key' sortieren, geben Sie einfach' a - b' zurück. –

5
var obj = { 
    "1": "google", 
    "2": "yahoo", 
    "3": "msn", 
    "4": "stackoverflow", 
    "5": "github", 
    "6": "jsfiddle", 
    "7": "amazon", 
    "8": "ebay" 
}; 

var arr = []; 

for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     arr.push(obj[key]); 
    } 
} 

alert(arr.sort()); 

Dadurch werden Ihre Werte in aufsteigender Reihenfolge sortiert. Lass mich mal geben, wie du das in ein Objekt umwandeln kannst.

+0

Das einzige Problem mit dieser Lösung ist, dass Sie die Schlüsselwerte in verpassen das resultierende Array – AXL

Verwandte Themen