Неправильные значения метода массива сортировки - PullRequest
0 голосов
/ 01 февраля 2019

Здравствуйте, я не совсем уверен, почему я не получаю правильные значения, вот пример. Это основной вопрос, но я не уверен, если это произошло раньше ...

const arr = [4,1,9,5,6]; 
arr.sort((a, b) => {
    console.log(a);
}); 

Я долженбыть полученным:

// вывод: 4,1,9,5,6

Вместо этого я получаю:

// вывод: 1,9,5,6

Я помню первое значение в этом случае «a», используемое для отображения всех элементов в массиве.это изменилось?

Ответы [ 3 ]

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

Ваша функция сравнения всегда возвращает void.Необходимо вернуть> 0 для a больше, чем b, 0, если они равны, и <0, если b больше. </p>

const arr = [4,1,9,5,6]; 
arr.sort((a, b) => a - b);

console.log(arr);
0 голосов
/ 01 февраля 2019

Обратный вызов внутри функции сортировки используется, когда вы хотите написать собственную логику компаратора.Попытайтесь понять, как работает compareFunction -

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

Source- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

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

Вы делаете console.log из предиката сравнения .У вас нет гарантии порядка применения этой функции к вашим данным.

Порядок вывода зависит как от порядка массива , так и от базового алгоритма сортировки, используемого sort.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...