NinaFFF
@NinaFFF
начинающий программист

Почему первый элемент в нативной функции javascript — sort() — это второй элемент в моем массиве?

Почти во всех доках пишут, что сортировать своей функцией можно вот так:
let arr = [ 15, 2, 9 ];
arr.sort((a, b) => a - b);

Я пытаюсь понять, что же такое первый элемент "a" и второй элемент "b" вот таким образом:
let arr = [ 15, 2, 9 ];
arr.sort((a, b)=> console.log(`a(first) -${a} b(second) -${b}`));
//Chrome and Safari
//a(first)-2 b(second)-15
// a(first)-9 b(second)-2

но получается первый элемент "a" это 2, а второй элемент "b" это 15 ?
Когда я пробую эту же проверку в firefox то у меня получается правильный первый элемент:

//a(first)-15 b(second)-2
//a(first)-2 b(second)-9

Заранее спасибо!
  • Вопрос задан
  • 494 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Callback-функция в sort - это просто функция, задающая соотношение между сравниваемыми значениями a и b. При работе алгоритма сортировки она вызывается для каждой пары значений и, возможно, неоднократно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В v8 (chrome/node.js) для Array.prototype.sort используется алгоритм QuickSort, а в SpiderMonkey (Firefox) используется MergeSort
Притом начиная со стандарта 2019 года этот метод должен производить стабильную сортировку, что возможно для обоих этих алгоритмов

А колбэк этого метода - это просто функция сравнения, которая должна сообщить алгоритму, какое из переданных значений находится раньше
Ответ написан
Alexandroppolus
@Alexandroppolus
кодир
Реализовано по-разному. ФФ делает compare(a, b), Хром - compare(b, a), только и всего. Оба варианта правильные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы