2013-07-24 6 views
0

J'envoie de cities.php une chaîne JSON comme ceci:Ordre alphabétique objet JSON et retour à l'objet JSON

[{"name":"Boston","len":1,"cid":"292"},{"name":"Miami","len":1,"cid":"243"},{"name":"Washington","len":1,"cid":"36"},{"name":"Alabama","len":1,"cid":"5"},{"name":"New York","len":1,"cid":"435"}] 

-je récupérer puis à mon cities.html comme ceci:

var cities = {}; 
$.getJSON('http://mypage.com/json/cities.php', function(data){ 
    $.each(data, function (k, vali) { 
     cities[vali.cid] = vali.name; 
    }); 
}); 

Je prends la JSON et la mise en un objet javascript et il fonctionne tout simplement parfait et vient comme ça:

{ 
5: 'Alabama', 
36: 'Washington', 
243: 'Miamai', 
292: 'Boston', 
435: 'New York' 
}; 

C'est presque OK mais ... Ce n'est pas dans l'ordre alphabétique?

je dois régler ce problème par son nom avant d'entrer dans les villes {} objet ...

Comment puis-je y arriver?

Espérant aide et merci à l'avance ...

+0

un coup d'oeil http://stackoverflow.com/ questions/1129216/trier-objets-dans-un-tableau-par-un-champ-valeur-en-javascript – svillamayor

+0

Lorsque vous regardez ce post, tout montre des objets array [{}] mais le mien est juste un objet {} et aucun d'entre eux montre comment l'obtenir bac k à un objet après le tri? – Mansa

+0

données est un tableau d'objets – svillamayor

Répondre

1

écrire une fonction de comparaison

function compare(a,b) { 
    if (a.name < b.name) 
    return -1; 
    if (a.name > b.name) 
    return 1; 
    return 0; 
} 

puis trier vos données

var cities = {}; 
$.getJSON('http://mypage.com/json/cities.php', function(data){ 
    data.sort(compare); 
    $.each(data, function (k, vali) { 
     cities[vali.cid] = vali.name; 
    }); 
}); 
+0

J'ai essayé cette solution, mais sans chance ... Il semble que la partie $ .each la trie par la suite ... Des idées? – Mansa

+0

le tableau doit être trié correctement, peut-être le problème est comment utilisez-vous l'objet villes – svillamayor