@bzotsss

Как работает array.sort()?

Хотелось бы узнать почему

var myarray=[25, 8, 7, 41];
myarray.sort(function (a, b) { 
  return a - b;
}) //Массив будет [7, 8, 25, 41]

вернёт меньший элемент, а не 17? Я понимаю, что мы сравниваем элементы и возвращаем либо : -1 либо 1 либо 0, меня интересует вопрос - почему, когда мы пишем retrun a-b, возвращается меньший элемент, а не 17? Я читал learn.js, но понял смутно.
  • Вопрос задан
  • 129 просмотров
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Функция, которую передают в метод sort() — это только весы с двумя чашами:
606d5ddc8957c413346483.png

В них каждый раз передают какие-то 2 элемента массива, и весы должны вынести свой вердикт: кто из двух тяжелее. Таких взвешиваний при одной сортировке массива происходит не одно, а множество.

Сортируют не только массивы чисел, где всё просто и достаточно a - b. Например, массив объектов типа
[
  {name: "Вольдемар", iq: 165},
  {name: "Сигизмунд", iq: 178},
  {name: "Жоржик", iq: 85},
]
захочется отсортировать по свойству iq. Тогда функция должна будет возвращать a.iq - b.iq
Ответ написан
GavriKos
@GavriKos
Вернет и не меньший элемент, и не 17. Вернет отрицательное или положительное число. Это по сути сравнение - если функция вернула отрицательное - то значит a < b и надо a переместить в массиве ниже (на пузырьке проще объяснять).
С таким же успехом вы можете написать что то вроде:
return a>b?1:(a
Ответ написан
Комментировать
zb_venom
@zb_venom
Жизнерадостный чебурек
Вложенная в сорт функция возвращает 17 оно же соответствует return 1. В зависимости о того положительный, отрицательный или же нулевой результат пришел, функция sort меняет позицию элементов массиве.
Как то так можно себе это представить для наглядности:
const sort = (a, b, result) => {
       [a, b] = result > 0 ? [b, a] : [a, b];
}

При всём этом внутри функции sort есть сортировка, будь то сортировка пузырьком
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы