Недавно я прочитал много ответов о сортировке в JavaScript, и я часто натыкаюсь на функцию сравнения, которая выглядит так:
array.sort(function(a,b){ a > b ? 1 : -1; });
Итак, это функция сравнения, которая возвращает 1, если a
больше, чем b
и -1, если a
меньше OR EQUAL TO 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, мы получим немного другой отсортированный массив в разных браузерах? Это может быть причиной? И есть ли еще какие-то веские причины не возвращать нуль вообще?