Я просматривал метод javaScript .sort() и запутался.

В веб-документах MDN указано (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) следующее:

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

И выше правило может быть записано как:

const array1 = [ 5, 3, 8 ];
// for Ascending order:
console.log( array1.sort((a, b) => a - b) );  // [3, 5, 8]
// for Descending order:
console.log( array1.sort((a, b) => b - a) );  // [8, 5, 3]

Идеально!!!

Но когда я добавил console.log(), я обнаружил, что говорю… да?

В строке 6 я добавил console.log(), чтобы увидеть значения «a» и «b», и они оказались не такими, как я ожидал.

Это то, что я ожидал: во время первого цикла: «a»: 5 (первый элемент в массиве), «b”: 3.

Но то, что я вижу в результатах console.log:

1-я петля: «а»: 3, «б»: 5. уб ‹ 0, сохранить порядок — Результаты [3, 5, 8]

2-й цикл: «a»: 8, «b»: 3. ab › 0, отсортировать b до а — Результаты [3, 5, 8]

3-й цикл: «a»: 8, «b»: 5. ab › 0, отсортировать b до а — Результаты [3, 5, 8]

Если я сортирую [ 8, 5, 3 ], сортировка завершается в два цикла:

Итак, должен существовать алгоритм сравнения, который использует метод sort(), и я был очень удивлен, насколько он отличается от того, что я ожидал. Итак, добавил console.log(). Возможно, вы увидите что-то очень интересное.