Возможно, потому что функция должна возвращать -1
, если a
меньше, 0
, если они равны, и 1
, если a
больше (или наоборот, если вы хотите изменить порядок). Редактировать: На самом деле это должно быть ноль, положительное или отрицательное число (как указал @pimvdb, и это то, что я использую в приведенном ниже примере). Ваша функция никогда не вернет -1
, и это может создать проблемы.
Рассмотрим 1
и 3
. Ваша функция возвращает 1
для 1 < 3
, что нормально, но возвращает 0
для 3 < 1
. В одном случае число отличается, в другом вы говорите, что они равны.
То, что FF / Chrome сортируют его в обратном порядке, может быть связано с алгоритмом сортировки, который они используют.
Попробуйте:
[1, 4, 2, 3].sort(function (a, b) { return b - a; });
Обновление: Чтобы подтвердить это, мы можем взглянуть на спецификацию, раздел 15.4.4.11 Array.prototype.sort (comparefn ), где указаны свойства, которые имеют Для выполнения функции сравнения:
Функция comparefn является непротиворечивой функцией сравнения для набора значений S
, если все приведенные ниже требования выполнены для всех значений a , b и c (возможно, то же значение) в наборе S
: запись a <<sub> CF b означает сравнить (а, б) <0; <em>a = CF b означает comparefn (a, b) = 0 (любого знака); и a > CF b означает сравнениеf (a, b) > 0.
- Вызов comparefn (a, b) всегда возвращает одно и то же значение v, если задана определенная пара значений a и b в качестве двух аргументов. Кроме того, тип ( v ) является числом, а v не является NaN . Обратите внимание, что это означает, что точно один из a <<sub> CF b ,
a = CF b и a > CF b будет истинным для данная пара a и b .
- Вызов comparefn (a, b) не изменяет объект this .
- a = CF a (рефлексивность)
- Если a = CF b , то b = CF a (симметрия)
- Если a = CF b и b = CF c , затем a = CF c (транзитивность = CF )
- Если a <<sub> CF b и b <<sub> CF c , затем a <<sub> CF c (транзитивность <<sub> CF )
- Если a > CF b и b > CF c , затем a > CF c (транзитивность> CF )
ПРИМЕЧАНИЕ. Вышеуказанные условия необходимы и достаточны для того, чтобы comparefn делил множество S на классы эквивалентности и чтобы эти классы эквивалентности были полностью упорядочены.