Что не так с .sort() в Javascript?

Ни как не могу понять принцип работы .sort() в javascript'е, перечитал кучу ресурсов, думал, что понял, но не тут то было, есть ситуация, в которую меня загнали обстоятельства, так что изменить исходные данные Я не могу, могу конечно пересобрать массив на клиенте, но не желательно.

Ситуация такая, есть массив, каждый элемент которого, массив с четырьмя строками, мне нужно дать пользователю возможность отсортировать список на экране.
Пример

Пример сильно упрощен, без кнопочек и прогрессбаров, но сути это не меняет, Я проверил, поведение одинаковое, условия воссоздал максимально точно.


Смысл в том, что у меня не получается отсортировать массив по значению array[1], сортирую стандартным array.sort(sortFunction);

Так:
function sortFunction(i, ii) {
    if (i[1] > ii[1])
        return 1;
    else if (i[1] < ii[1])
        return -1;
    else
        return 0;
}


и так:
function sortFunction(i, ii) {
   return i[1]-ii[1];
}


Результат одинаковый, в опере, файрфокс и сафари сортирует по array[0], в хроме происходят чудеса.
  • Вопрос задан
  • 4138 просмотров
Решения вопроса 1
@theaspin
Алгоритм сортировки нестабилен в хроме, то есть порядок для одинаковых значений не определен. Самый простой вариант — дополнительная сортировка по городу, если значения по счетчику совпадает.

function sCount(i, ii) {
  var delta = i[1] - ii[1];
  return delta == 0 ? sCity(i, ii) : delta;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы