Lors de l'écriture d'un plugin jQuery, je cherchais un moyen pour trier un tableau (array) selon une des clés des objets JSON qui le composaient. Après quelques minutes à rechercher un exemple concret pour faire la manipulation, j'en suis venu à la conclusion que ça serait plus simple de trouver comment faire par moi-même.
En m'inspirant de ce qu'il y avait de disponible dans Prototype, j'ai vu qu'il existait la fonction sortBy pour trier selon une fonction personnalisée passée en paramètre mais qu'il n'y avait pas d'équivalent sous jQuery. À ma grande surprise, c'est en JavaScript pur que j'ai trouvé la solution.
Pour se mettre en contexte, mon array pouvait ressembler à ceci (entendons nous, à quelques détails près!) :
var arr = [Pour faire un tri par clé il suffit d'écrire une petite fonction toute simple :
{name:'Code 18', age:28, city:'Montréal'},
{name:'Gandalf', age:1000, city:'Middle-Earth'},
{name:'Elvis', age:42, city:'Memphis'},
{name:'Barack Obama', age:48, city:'Chicago'},
{name:'Ronald McDonald', age:47, city:'San Bernardino'}
];
function sortByName(key1, key2){Ou encore :
return key1.name > key2.name;
}
function sortByAge(key1, key2){Ces fonctions effectueront un tri ascendant, c'est-à-dire du plus petit au plus grand. Pour les inverser, il suffit de remplacer > par <. Ensuite, on indique la fonction de tri à la méthode native sort() de JavaScript. La fonction peut être anonyme ou pas (ce que j'ai fait pour plus de lisibilité) et il n'est pas nécessaire de réattribuer l'array trié à la variable (référence).
return key1.age > key2.age;
}
arr.sort(sortByName);Pour visualiser ce qui se passe, vous pouvez imprimer le résultat avec Firebug avant et après le tri :
arr.sort(sortByAge);
console.log(arr);C'est ridicule comme c'était facile. Ma paresse initiale m'a fait perdre plus de temps que ça m'en a pris pour figurer la solution. Voilà, c'était ce que j'ai appris aujourd'hui.
j'aime les soirées comme ca,
une recherche jquery trier un json dans google, je tombe directement sur ton blog, et ta réponse est niquel, et m'évite de refaire une requete AJAX pour rien!
merci beaucoup!
Bonjour,
Merci pour cette solution.
Cependant votre fonction ne marche pas correctement dans tous les navigateurs...
J'ai trouvé mon bonheur ici.
Ca ne marche pas chez moi, mais j'ai juste changé "<" par "-" et c'est bon ! (voir: http://www.w3schools.com/jsref/jsref_sort.asp)