@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, но понял смутно.
  • Вопрос задан
  • 133 просмотра
Решения вопроса 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 есть сортировка, будь то сортировка пузырьком
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект