Сортировка в 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, мы получим немного разные отсортированные массивы в разных браузерах? Может ли это быть причиной? И есть ли другие веские причины вообще не возвращать ноль?