Сортировка в JavaScript: должна ли каждая функция сравнения иметь оператор «return 0»?

Недавно я прочитал много ответов о сортировке в JavaScript и часто сталкиваюсь с функцией сравнения, которая выглядит следующим образом:

array.sort(function(a,b){ a > b ? 1 : -1; });

Так что это функция сравнения, которая возвращает 1, еслиa больше, чемb и -1 еслиa меньше или равноb, Как описано в MDN (ссылка на сайт), функция сравнения также может возвращать ноль, чтобы гарантировать, что относительное положение двух элементов остается неизменным:

Если compareFunction (a, b) возвращает 0, оставьте a и b неизменными по отношению друг к другу, но отсортированные по всем различным элементам.

Так что официальные примеры выглядят так:

function compare(a, b) {
  if (a < b) return -1;
  if (a > b) return 1;
  return 0;
}

И действительно, добавивreturn 0 утверждение, алгоритм сортировки часто требует меньше итераций и работает быстрее в общей сложности (JSPerf).

Так что мне было интересно, есть ли какое-либо преимущество от пропускаreturn 0 заявление.

Я понял, что на MDN, это также говорит:

Примечание: стандарт ECMAscript не гарантирует такого поведения, и поэтому не все браузеры (например, версии Mozilla, датируемые как минимум 2003 годом) соблюдают это.

ссылаясь на поведение, чтоa а такжеb должен остаться без изменений, если 0 возвращается. Так что, возможно, возвращая 0, мы получим немного разные отсортированные массивы в разных браузерах? Может ли это быть причиной? И есть ли другие веские причины вообще не возвращать ноль?

Ответы на вопрос(2)

Ваш ответ на вопрос