Citat:
Ursprungligen postat av
vhe
Funkar fint i min chrome. Miljö:
Kod:
$ env | grep -E '(LANG|LC_)'
LC_ALL=sv_SE.UTF-8
Sortering:
Kod:
["a", "å", "ä", "e", "ë", "o", "ö", "u", "ü", "x", "y", "z"].sort(function(a, b) { return a.localeCompare(b) })
["a", "e", "ë", "o", "u", "x", "y", "ü", "z", "å", "ä", "ö"]
Är du säker på att du inte missförstår localCompares interface, helt enkelt? Den tar inte två strängar som argument. Det är en instansmetod i en sträng som tar en annan sträng som argument.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
Antar att sorteringen inte implementeras i browsern, oavsett. Det lär väl delegeras till av OS:et tillhandahållna bibliotek.
Nej, den jag förslog är ingen instansmetod. Det är skillnad på metoderna
"".localeCompare (om du nämnde) och
String.localeCompare. Den senare är generisk och tar två argument, se:
[PHP]
"".localeCompare.length; // 1
String.localeCompare.length; // 2
[/PHP]
Tyvärr verkar den bara finnas i Firefox, så i t.ex. Webkitfallet blev det då lika med att skicka in
undefined => blä.
localeCompare har över huvud taget varit underspecificerad verkar det. Men bara att den finns (och har det namnet) ger en vink om att den skall (bör) göra annat än att sortera enligt ascii-koder. Det skulle ju vara en helt vanlig numerisk sort, sånt finns redan.
Nu i lite modernare tider är det tydligen specat att man skall kunna skicka med bl.a. en locale, tidigare var det inte specat vad den skulle göra (men vad tusan borde den göra? sortera som nummer?

)
Firefox har i alla fall
String.localeCompare med arity 2 som är utmärkt att skicka in till
"äüaåöi".sort(). I t.ex. Chrome tycks den som sagt göra rätt om man åbäkar sig ock skickar in
function (s0, s1) { return s0.localeCompare(s1); }.
/p