1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| /*
* Daniel Hagnoul et SpaceFrog
*
* Tri alphanumérique d'un tableau (array) en ordre ascendant par défaut.
* Le tableau ne peut contenir que du texte ! Par exemple, pas [2.00] mais ["2.00"] !
* Pour le tri descendant : sortTable(tab, "desc");
*/
function sortTable(table, ordre){
/*
* SpaceFrog
*/
function replaceSpec(Texte){
var TabSpec = {"à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","è":"e","é":"e","ê":"e","ë":"e","ç":"c","ì":"i","í":"i","î":"i","ï":"i","ù":"u","ú":"u","û":"u","ü":"u","ÿ":"y","ñ":"n","-":" ","_":" "},
reg=/[àáâãäåòóôõöøèéêëçìíîïùúûüÿñ_-]/gi;
return Texte.replace(reg, function(){
return TabSpec[arguments[0].toLowerCase()];
}).toLowerCase();
}
/*
* Daniel Hagnoul
*/
if (ordre == 'desc'){
table.sort(function(a, b){
var x = parseInt(a, 10),
y = parseInt(b, 10),
c1 = replaceSpec(a),
c2 = replaceSpec(b);
if (isNaN(x) || isNaN(y)){
if (c1 > c2){
return -1;
} else if(c1 < c2){
return 1;
} else {
return 0;
}
} else {
return(b - a);
}
});
} else {
table.sort(function(a, b){
var x = parseInt(a, 10),
y = parseInt(b, 10),
c1 = replaceSpec(a),
c2 = replaceSpec(b);
if (isNaN(x) || isNaN(y)){
if (c1 > c2){
return 1;
} else if(c1 < c2){
return -1;
} else {
return 0;
}
} else {
return(a - b);
}
});
}
return table;
}
// le tableau ne doit contenir que des éléments textes, pas de 2.00 au lieu de "2.00"
var table = ["enchanteur", "réel", "échange", "indélicat", "en vrac", "véridique", "2.00", "23.25", "éparpiller", "bon", "échangiste", "échangeur", "enchanté", "Allo", "2.64", "23.02", "2.05", "23.00"];
// Firebug
console.log(sortTable(table));
console.log(sortTable(table, "desc")); |
Partager