Как получить случайные элементы из массива
Возможный дубликат:
JavaScript: получение случайного значения из массива
var numbers = new Array('1','2','4','5','6','7','8','9','10');
У меня есть массив JavaScript и теперь хочу случайным образом выбрать из него четыре разных номера, а затем выразить их на странице (через document.write
). Очевидно, каждый раз, когда страница перезагружается пользователем, она отображает четыре разных случайных числа.
Ответы
Ответ 1
Вы можете перетасовать массив и выбрать первые четыре.
numbers.sort( function() { return 0.5 - Math.random() } );
Теперь numbers[0]
, numbers[1]
... и т.д. имеют случайные и уникальные элементы.
Обратите внимание, что этот метод может не быть оптимальным способом перетасовать массив: см. Правильно ли использовать метод JavaScript Array.sort() для перетасовки? для обсуждения.
Ответ 2
Если вы хотите, чтобы это было так же произвольно, как позволяли встроенные версии JavaScript Math.random()
, вы могли бы использовать что-то вроде следующего, что также имеет преимущества оставить исходный массив нетронутым и только рандомизировать столько же массива при необходимости:
function getRandomArrayElements(arr, count) {
var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
while (i-- > min) {
index = Math.floor((i + 1) * Math.random());
temp = shuffled[index];
shuffled[index] = shuffled[i];
shuffled[i] = temp;
}
return shuffled.slice(min);
}
var numbers = ['1','2','4','5','6','7','8','9','10'];
alert( getRandomArrayElements(numbers, 4) );
Ответ 3
//return a random integer between 0 and 10
document.write(Math.floor(Math.random()*11));
Ответ 4
var numbers = new Array('1','2','4','5','6','7','8','9','10');
document.write(numbers[Math.floor(Math.random()*numbers.length)]);