Доброе время суток!

Популярность запроса «chrome javascript sort bug» в большинстве своем ссылается на ошибки связанные с различием в понимании типов в Chrome и других браузерах.

Как всем нормальным программистам известно, сортировка массива чисел отличается от строк, отображающих эти числа.
Унификация сортировки в разных браузерах достигается путем указания функции сравнения в параметрах метода sort:
arr.sort(function (a,b) {return a-b;})

Но я столкнулся с другой ситуацией (https://jsfiddle.net/1fu3s8og/):

alert([«2176»,«1»,«2246»,«29»,«27»,«1853»,«1986»,«104»,«2357»,«1000»,«55501»].sort(function (a,b) {return 0;}).join(","))

по идее должен выдавать начальный массив, но как бы не так!

Причем, еще мистификация — убирая последний, 11-й элемент, код начинает работать стабильно.
alert([«2176»,«1»,«2246»,«29»,«27»,«1853»,«1986»,«104»,«2357»,«1000»].sort(function (a,b) {return 0;}).join(","))

Есть ли у кого фиксы данной проблемы?
Поделиться с друзьями
-->

Комментарии (2)


  1. Starche
    14.08.2016 21:45
    +2

    А что вы вообще ожидали, когда писали «sort(function (a,b) {return 0;})»? Сортировка в JS не обязательно обладает устойчивостью, вот тут https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/sort в первом абзаце написано


    1. Starche
      14.08.2016 21:50
      +3

      А, ну и по поводу мистики.
      До 10 элементов включительно используется сортировка вставками. а выше — модифицированный quicksort. Подробности тут https://habrahabr.ru/post/265079/