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