2013-01-08 17 views
16

Ho un oggetto come di seguito. Cercando di riorganizzarlo in ordine crescente in base al valore. Simile al metodo di ordinamento di array Javascript.Javascript Ordina oggetto coppia chiave valore basato sul valore

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

Fatemelo sapere la soluzione migliore ...

+0

Questo post ti aiuterà a farlo, http://stackoverflow.com/questions/881510/json-sorting-in-jquery – Adil

+0

Prova masterList.sort() –

risposta

44

JavaScript oggetti non hanno alcun ordine. Sebbene la maggior parte dei browser esegua l'iterazione nello stesso ordine in cui sono state create le proprietà, non c'è alcuna garanzia, quindi l'ordinamento non è supportato sugli oggetti.

Vedi qui per ulteriori informazioni: Does JavaScript Guarantee Object Property Order?

Potreste anche essere interessati a ciò che John Resig has got to say sulla questione.


Se avete bisogno di un elenco di ordinamento-grado, dovrete conservarlo come un array di oggetti:

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

Poi, per ordinare loro, basta usare il metodo della serie regolare sort:

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

Ecco il violino: http://jsfiddle.net/ASrUD/

+0

grazie mille – r1webs

+0

Forse non lo faccio t capire sort(), ma questo non funziona con valori numerici. Cercando di ordinare per 'chiave' restituisce la funzione non definita. – dval

+1

@dval - È il 'localeCompare' che ti sta buttando via. Se stai ordinando per 'chiave', quindi semplicemente' restituisci 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()); 

Questo ordinerà i tuoi valori in ordine crescente. lasciatemi dare a volte ti cambierà con come convertirlo in un oggetto.

+0

L'unico problema con questa soluzione è che si perdono i valori chiave in la matrice risultante – AXL

Problemi correlati