Не понимаю, как это работает?

В частности непонятна строчка arr.sort(() =>- 0.5);
Почему результат выполнения - обратный порядок цифр?
И что здесь принимается за a, а что за b? Как вообще в этом случае сортировка происходит, ничего не понимаю...
Благодарю!
function shuffle(arr) {
arr.sort(() =>- 0.5);
}

let arr = [1, 2, 3];
shuffle(arr);
alert(arr);
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Просто прочитайте документацию или ещё что-то про сортировку.

Вопрос «что здесь принимается за a, а что за b?» не самый удачный: в примере аргументы игнорируются.
В этом странном коде возвращается всегда отрицательное число. Значит, результат сортировки массива зависит только от внутренней реализации — от того, в каком порядке будут сравниваться пары элементов.
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
Похоже, что используется недокументированная особенность функции Array.sort()
Ведь согласно документации, сравнивающая функция должна однозначно давать порядок, а в вашем примере получается, что compareFunction(a,b)===compareFunction(b,a)

Насчёт a и b - они как бы есть, но они не указаны в параметрах, потому что не используются. Их можно указать, чтобы как бы соблюсти формальность, но смысла нет конкретно для вашего хитрого примера:
arr.sort((a,b) => -0.5);

Можете также заняться отладкой, чтобы понять, что происходит под капотом:
arr.sort((a,b) => {console.log(a,b); return -0.5});


Ваш пример крайне не удачный для целей обучения. Начинать лучше с простого и/или фундаментального, затем переходить к более сложному и/или частному.
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
С недавнего времени в массивах js используется реализация timsort.
Соответственно, если массив уже отсортирован в ту или иную сторону, то это "хороший случай", отрабатывающий за время O(N). Если воткнуть console.log, как советовали умные люди в предыдущих ответах, то можно увидеть тот самый "первоначальный поиск упорядоченных в любую сторону подмассивов". Им оказывается весь массив, и далее сравнения не требуются.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект