String.localeCompare()
Le
Pascal
Bonjour,
Il m'aura fallu quand même juste quelques années pour découvrir
l'existence de cette méthode !
Oui, je sais, je viens de vérifier et, effectivement, elle est bien
décrite page 101 (para. 15.5.4.9) du standard ECMA 262-3.
Mais quand même, comme je pense ne pas être le seul à m'étonner (=
et à ne
pas avoir comme livre de chevet préféré l'ouvrage précité), je =
me
permets d'en faire profiter tout le monde.
La méthode compare la chaîne courante avec celle passée en argument=
,
tenant compte des paramètres linguistiques de la machine locale.
Ainsi, en français, le "é" sera bien considéré comme étant plac=
é avant
le "f", par exemple.
L'exemple ci-dessous utilise la méthode dans une fonction permettant
finalement le tri localisé d'un tableau, à comparer avec les résult=
ats
précédents.
<script>
var t1 = ["fee", "echo"];
t1.sort();
alert(t1); // "echo,fee"
var t2 = ["fée", "écho"];
t2.sort();
alert(t2); // "fée,écho"
t2.sort(function(a,b) { return a.localeCompare(b) });
alert(t2); // "écho,fée"
</script>
Ah, JavaScript, quand tu nous tiens
Cordialement,
Pascal
Il m'aura fallu quand même juste quelques années pour découvrir
l'existence de cette méthode !
Oui, je sais, je viens de vérifier et, effectivement, elle est bien
décrite page 101 (para. 15.5.4.9) du standard ECMA 262-3.
Mais quand même, comme je pense ne pas être le seul à m'étonner (=
et à ne
pas avoir comme livre de chevet préféré l'ouvrage précité), je =
me
permets d'en faire profiter tout le monde.
La méthode compare la chaîne courante avec celle passée en argument=
,
tenant compte des paramètres linguistiques de la machine locale.
Ainsi, en français, le "é" sera bien considéré comme étant plac=
é avant
le "f", par exemple.
L'exemple ci-dessous utilise la méthode dans une fonction permettant
finalement le tri localisé d'un tableau, à comparer avec les résult=
ats
précédents.
<script>
var t1 = ["fee", "echo"];
t1.sort();
alert(t1); // "echo,fee"
var t2 = ["fée", "écho"];
t2.sort();
alert(t2); // "fée,écho"
t2.sort(function(a,b) { return a.localeCompare(b) });
alert(t2); // "écho,fée"
</script>
Ah, JavaScript, quand tu nous tiens
Cordialement,
Pascal

Poser une question


Euh mais où sont récupérés les fameux paramètres ? S'agit-il, comme dans
une collation en BD de la comparaison (ç == c) et le tri ?
Quel est le support effectif de cette méthode dans les navigateurs ?
Il me semblait qu'on en avait déjà parlé cette année (ou précédente ?)
Olivier Miakinen ?
(ça semble bien être du genre de ses centres d'intérêt c't'affaire)
Pas compris le sens de la question.
Les paramètres sont les valeurs des éléments du tableau (de l'array).
non ?
Question JS et fonction sort() :
« The localeCompare performs a locale-sensitive string comparison of the
stringVar and the stringExp and returns -1, 0, or +1, depending on the
sort order of the system default locale. »
nous dit M$ ici :
Du côté gecko (Mozilla et dérivés) c'est ici :
JS 1.5 minima (à ce que j'ai compris)
Le sort se fait donc un peu comme un tri d'un tableau à 2 dimensions,
la 2ième dimension étant celle de l'ordre (alphabétique) local,
dirait-on ?
--
sm
Je ne me rappelle pas, mais c'est possible. Cela dit, à chaque fois que
j'ai discuté de fonctions dont le comportement dépend de la locale de la
machine, c'était pour m'en méfier comme de la peste : cf. ma réponse
datant de moins de 24 h dans fr.comp.lang.php !
;-)
À mon avis, Pierre se demande quelle locale est utilisée (réponse :
celle du système si j'ai bien tout compris).
À ce que je crois, c'est bien de cet ordre là.
Je passe.
Merci.
C'est rigolo, ici ils ne parlent pas de la locale du système. Est-ce que
Mozilla & Co utilise une locale spécifique au lieu de celle de la machine ?
Beuh... non, pourquoi deux dimensions ? C'est simplement un tri dont la
fonction de comparaison est basée sur l'ordre des caractères dans une
langue donnée, et non sur un simple numéro d'ordre dans le répertoire
Unicode.
ça semblerait
sinon il faudrait une variable pour indiquer quelle localité, non ?
Une autre page alors :
--
sm
Je parierais que c'est ce qui était prévu, selon la NOTE 4 :
NOTE 4
Le second paramètre de cette fonction a des chances d'être utilisé dans
une version future de cette norme ; il est recommandé que les
implémentations n'utilisent pas ce paramètre pour quoi que ce soit d'autre.
Ceci est la preuve que Mozilla sait accéder à la locale de la machine
pour le formatage des dates. On pourrait alors se laisser aller à penser
qu'il peut le faire aussi pour les tris de chaînes (quoique ce ne soient
probablement pas les mêmes fonctions système qui soient appelées).