Я хочу использовать javascript для генерации 50 случайных чисел без повторения, а число находится в диапазоне от 1 до 50. Как я могу это понять? 50 чисел, хранящихся в массиве.javascript для генерации 50 случайных чисел без повторения
0
A
ответ
4
Сначала приготовьте упорядоченный список:
var i, arr = [];
for (i = 0; i < 50; i++) {
arr[i] = i + 1;
}
затем перетасовать его.
arr.sort(function() {
return Math.random() - 0.5;
});
Я протестировал вышеуказанный метод, и он прошел хорошо. Однако спецификация ECMAScript не требует, чтобы Array.sort
был реализован таким образом, что этот метод создает действительно рандомизированный список, поэтому, хотя он может работать и сейчас, результаты могут потенциально измениться без предупреждения. Ниже приведена реализация Shuffle Fisher-Yates, которая не только гарантирует получение разумно случайного распределения, но и быстрее, чем захваченный сорт.
function shuffle(array) {
var p, n, tmp;
for (p = array.length; p;) {
n = Math.random() * p-- | 0;
tmp = array[n];
array[n] = array[p];
array[p] = tmp;
}
}
У вашего кода есть небольшая ошибка, так как я начинаю с 1. Используйте вместо этого метод 'push' массива, чтобы добавить к нему элемент. http://jsfiddle.net/KUfcf/ – ShankarSangoli
Спасибо, исправлено (до комментария на самом деле). 'push' немного медленнее, чем прямое присвоение, поэтому (в данном случае) я считаю, что лучше использовать' [i] '. –
Решение, которое вы предоставили, отлично работает. Спасибо – LiveJin