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
| /*
* Fonction sortTable( table, [ ordre [, bcp47String ]] )
*
* sortTable( table ) pour un tri ascendant avec le BCP "fr-BE".
*
* Daniel Hagnoul 2014-12-16 v2.0.0
*
* Tri alphanumérique d'un tableau (array) en ordre ascendant par défaut.
* Le tableau peut contenir du texte et des nombres. Exemple : "2" ou 2.
*
* Pour le tri descendant : sortTable( tab, "desc" );
*
* Utilise l'objet Intl : ECMAScript Internationalization API.
* "http://www.ecma-international.org/ecma-402/1.0/#sec-8"
*
* BCP 47 String : "fr-BE" par défaut.
* "http://tools.ietf.org/html/rfc5646"
*/
function sortTable( table, ordre, bcp47String ){
var bcpStr = bcp47String || "fr-BE",
ctor = new Intl.Collator( bcpStr, { "numeric" : true } ),
n = ( ordre === "desc" ) ? ( -1 ) : ( 1 );
table.sort( function( a, b ){
return n * ctor.compare( a, b );
});
return table;
}
// le tableau peut contenir des éléments textes et des nombres
var table = [ 3, 8, 1, 14, 140, 0.014, -124.124, "-124.125",
"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"];
console.log( sortTable( table ) );
/*
* [-124.124, "-124.125", 0.014, 1, "2.00", "2.05", "2.64", 3, 8, 14,
* "23.00", "23.02", "23.25", 140, "Allo", "bon", "échange", "échangeur",
* "échangiste", "en vrac", "enchanté", "enchanteur", "éparpiller",
* "indélicat", "réel", "véridique"]
*/
console.log( sortTable( table, "desc" ) );
/*
* ["véridique", "réel", "indélicat", "éparpiller", "enchanteur",
* "enchanté", "en vrac", "échangiste", "échangeur", "échange",
* bon", "Allo", 140, "23.25", "23.02", "23.00", 14, 8, 3, "2.64",
* "2.05", "2.00", 1, 0.014, "-124.125", -124.124]
*/ |