Ваш код работает так, как вы ожидали для меня.
Это не имеет функционального значения, но вам не нужно вызывать .toString()
для чего-то, что уже является String.То есть, вы можете упростить mySort
до этого:
var mySort = function(s1, s2){
return s1.name.localeCompare(s2.name);
}
(я также предпочитаю объявлять все функции как переменные, поскольку они все одинаковы в JavaScript - поэтому они должны обрабатываться согласованно.)
Однако, чтобы ответить, почему это может не сработать для вас, за http://msdn.microsoft.com/en-us/library/windows/apps/62b7ahzy%28v=vs.94%29.aspx (что интересно, страница MDN ничего об этом не говорит) - выделено мое:
localeCompare выполняет чувствительное к локали сравнение строк stringVar и stringExp и возвращает -1, 0 или +1, в зависимости от порядка сортировки системного языкового стандарта по умолчанию .
Если вы хотите что-то, что будет сортировать только по кодам символов, независимо от локали пользователя, вы можете использовать это вместо:
var mySort = function(s1, s2){
if(s1 == s2){
return 0;
}
return s1.name > s2.name;
}
Это будет сортировать последовательно, независимо отнастроек / предпочтений клиента или пользователя - но он также возвращает результаты, которые вы классифицировали как неправильные.
Редактировать : Как вы уже упоминали, наблюдаемое вами поведениеЭта проблема известна в Google Chrome и, как представляется, известна в Chrome и отслеживается по http://code.google.com/p/v8/issues/detail?id=459.
.