Как рабочий процесс / последовательность функции JS: сравнить с массивом? - PullRequest
0 голосов
/ 01 февраля 2020

Я знаю, что это функция:

function myFunction() {
points.sort(function(a, b){return a - b});

полностью работает для сортировки массива, содержащего число в порядке возрастания.

Если результат отрицательный, a сортируется до b.

Если результат положительный, то b сортируется до a.

Если результат равен 0, изменения порядка сортировки двух значений не производятся.

Но какова последовательность для сравнения? "а" и "б"? «Index0» сравнивает «index1», затем «index1» сравнивает «index2» и т. Д. c ..? Я просто не понимаю этот рабочий процесс / последовательность "функции сравнения" ...

1 Ответ

0 голосов
/ 01 февраля 2020

Не указано. Спецификация гласит: :

  1. Выполнить зависящую от реализации последовательность вызовов абстрактной операции Get, Set, DeletePropertyOrThrow и HasOwnProperty с obj в качестве первого аргумента и SortCompare (описано ниже), такой что:
  2. ...

Поскольку этот порядок не указан, мы использовали , чтобы иметь возможность видеть поведение, подобное это , в котором несовместимый алгоритм сортировки приводит к различным результатам сортировки в разных средах, поскольку разные среды сравнивали элементы массива в разных порядках.

Если вы делаете имеет стабильный, согласованный алгоритм сортировки, тогда порядок сравнения элементов не должен иметь значения, особенно если учесть, что сортировка теперь должна быть стабильной по состоянию на ES2019 (", то есть элементы, сравниваемые равными должен оставаться в своем первоначальном порядке ").

Независимо от порядка, в котором движок сравнивает элементы, результирующий массив должно быть одинаковым в разных средах. Он может сначала сравнить элемент [0] с элементом [1], либо сначала сравнить элемент [length - 1] с элементом [length - 2].

...