Мне нужно объяснение того, как JS имеет дело с сортировкой? - PullRequest
0 голосов
/ 01 октября 2018

предположим, что есть массив

let arr = [10, 12, 3, 2, 5, 1, 9, 7, 8, 9, 4];

Попытка этого

arr.sort ((a, b) => a> b);

// Результаты: [1, 4, 3, 2, 5,7, 8, 9, 9, 10, 12]

Но, используя этот

arr.sort ((a, b) => a - b);

// Результаты: [1, 2, 3, 4, 5, 7, 8, 9, 9, 10, 12]

let arr = [10, 12, 3, 2, 5, 1, 9, 7, 8, 9, 4];

console.log(arr.sort((a, b) => a > b));

let arr1 = [10, 12, 3, 2, 5, 1, 9, 7, 8, 9, 4];

console.log(arr1.sort((a, b) => a - b));

1 Ответ

0 голосов
/ 01 октября 2018

Вот хорошее прочтение, чтобы понять, как Array.sort() работает

Чтобы процитировать что-то относящееся к вашему вопросу:

Если сравнить функцию (a, b) меньше 0, сортируйте a по индексу, меньшему чем b, то есть a идет первым.

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

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

Если CompareFunction (a, b) больше 0, сортировка b по индексу ниже, чем a, т. Е. B идет первым.

И это:

arr.sort((a, b) => a > b);

возвращает true или false, который оценивается как 1 или 0, а не -1

Таким образом, с этой «неполной» функцией результат зависит от алгоритма сортировки, используемого движком, в котором ваш кодвыполняется

  • rhino.js : 10,12,3,2,5,1,9,7,8,9,4
  • SpiderMonkey : 1,2,3,4,5,7,8,9,9,10,12
  • v8 : 1,4,3,2,5,7,8,9,9,10,12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...