GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 16 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Goiffon
Le #22101091
On 10/05/2010 18:08, Pascal wrote:
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ésultats
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>



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 ?
SAM
Le #22101641
Le 5/11/10 2:22 PM, Pierre Goiffon a écrit :
On 10/05/2010 18:08, Pascal wrote:
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ésultats
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>





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)


Euh mais où sont récupérés les fameux paramètres ?



Pas compris le sens de la question.
Les paramètres sont les valeurs des éléments du tableau (de l'array).
non ?

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 ?




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
Olivier Miakinen
Le #22101721
Le 11/05/2010 15:52, SAM répondait à Pascal et à Pierre Goiffon :

On 10/05/2010 18:08, Pascal wrote:

alert(t2); // "fée,écho"
t2.sort(function(a,b) { return a.localeCompare(b) });
alert(t2); // "écho,fée"





Il me semblait qu'on en avait déjà parlé cette année (ou précédente ?)
Olivier Miakinen ?



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 !

(ça semble bien être du genre de ses centres d'intérêt c't'affaire)



;-)

Euh mais où sont récupérés les fameux paramètres ?



Pas compris le sens de la question.
Les paramètres sont les valeurs des éléments du tableau (de l'array).
non ?



À mon avis, Pierre se demande quelle locale est utilisée (réponse :
celle du système si j'ai bien tout compris).

S'agit-il, comme dans
une collation en BD de la comparaison (ç == c) et le tri ?





À ce que je crois, c'est bien de cet ordre là.

Quel est le support effectif de cette méthode dans les navigateurs ?





Je passe.

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 :



Merci.

Du côté gecko (Mozilla et dérivés) c'est ici :
JS 1.5 minima (à ce que j'ai compris)



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 ?

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 ?



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.
SAM
Le #22101801
Le 5/11/10 4:13 PM, Olivier Miakinen a écrit :
Le 11/05/2010 15:52, SAM répondait à Pascal et à Pierre Goiffon :
On 10/05/2010 18:08, Pascal wrote:
alert(t2); // "fée,écho"
t2.sort(function(a,b) { return a.localeCompare(b) });
alert(t2); // "écho,fée"


Euh mais où sont récupérés les fameux paramètres ?


Pas compris le sens de la question.
Les paramètres sont les valeurs des éléments du tableau (de l'array).
non ?



À mon avis, Pierre se demande quelle locale est utilisée (réponse :
celle du système si j'ai bien tout compris).



ça semblerait
sinon il faudrait une variable pour indiquer quelle localité, non ?

Du côté gecko (Mozilla et dérivés) c'est ici :
JS 1.5 minima (à ce que j'ai compris)



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 ?



Une autre page alors :

--
sm
Olivier Miakinen
Le #22101961
Le 11/05/2010 16:27, SAM a écrit :

À mon avis, Pierre se demande quelle locale est utilisée (réponse :
celle du système si j'ai bien tout compris).



ça semblerait
sinon il faudrait une variable pour indiquer quelle localité, non ?



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.

Du côté gecko (Mozilla et dérivés) c'est ici :
JS 1.5 minima (à ce que j'ai compris)



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 ?



Une autre page alors :



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).
Publicité
Suivre les réponses
Poster une réponse
Anonyme