Случайный набор чисел в массиве

Хочу понять как работает код ниже.

Что значит вернуть Math.random() - 0.5

Как я понимаю Matn.random() возвращает случайное число

от 0 до 1. Но как он здесь работает? Тут же числа больше 1.

function shuffle(array) {
  array.sort(function(){
    return Math.random() - 0.5;  // - 0.5 что это?
  }) 
}

let arr = [1, 2, 3];             // числа больше 1 и 0.
shuffle(arr);
alert(arr);


Ответы (2 шт):

Автор решения: Igor

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

function shuffle(array) {
  array.sort(function(a,b){
    let r = Math.random() - 0.5;
    console.log(a, b, r, r > 0? ": a greater than b" : ": a not greater than b");
    return r;
  }) 
}

let arr = [1, 2, 3];  
shuffle(arr);
console.log(arr);

→ Ссылка
Автор решения: vsemozhebuty

Как правило, функция сортировки работает с элементами массива, учитывает их значения, поэтому ваше замешательство тут понятно. Однако именно в этом случае для функции сортировки всё равно, что там в массиве — большие числа, маленькие, строки или что-то другое. Её задание просто перемешать элементы в случайном порядке. Поэтому она должна в случайном порядке возвращать то любое отрицательное число, то любое положительное. Число 0.5 как раз находится посередине набора всех чисел, которые может вернуть Math.random(). Поэтому Math.random() - 0.5 будет как раз в случайном порядке возвращать то небольшое отрицательное число, то небольшое положительное: если Math.random() даст число больше 0.5, то вычитание вернёт положительное число, если меньше — отрицательное.

→ Ссылка