2013-01-08 24 views
16

Mam obiekt jak poniżej. Próba zmiany kolejności w porządku rosnącym na podstawie wartości. Podobny do metody sortowania tablic JavaScript.JavaScript Sortowanie obiektu wartości klucza klucza na podstawie wartości

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

Proszę dać mi znać lepsze rozwiązanie ...

+0

Ten post pomoże ci, jak to zrobić, http://stackoverflow.com/questions/881510/json-sorting-in-jquery – Adil

+0

Spróbuj masterList.sort() –

Odpowiedz

44

JavaScript obiekty mają żadnego zamówienia. Mimo że większość przeglądarek wykonuje iteracje w tej samej kolejności, to właściwości zostały utworzone, nie ma żadnej gwarancji, więc sortowanie nie jest obsługiwane na obiektach.

Zobacz tutaj, aby uzyskać więcej informacji: Does JavaScript Guarantee Object Property Order?

Możesz być także zainteresowany Co John Resig has got to say w tej sprawie.


Jeśli potrzebujesz listę sortowania stanie, trzeba będzie przechowywać go jako tablica obiektów:

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" } 
]; 

Następnie, aby je rozwiązać, wystarczy użyć sort metodę regularnym układzie w:

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

Oto skrzypce: http://jsfiddle.net/ASrUD/

+0

dziękuję bardzo – r1webs

+0

Może po prostu nie " t rozumienia sort(), ale to nie działa dla wartości liczbowych. Próba sortowania według "klucza" zwraca niezdefiniowaną funkcję. – dval

+1

@dval - To 'localeCompare' cię wyrzuca. Jeśli sortujesz według 'key', to po prostu' return a - b'. –

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()); 

Spowoduje to sortowanie wartości w porządku rosnącym. pozwól mi dać ci kiedyś, że powrócisz, jak przekonwertować to na obiekt.

+0

Jedynym problemem z tym rozwiązaniem jest brak kluczowych wartości w wynikowa tablica – AXL

Powiązane problemy