Подтвердить что ты не робот

Как получить случайные элементы из массива

Возможный дубликат:
JavaScript: получение случайного значения из массива

var numbers = new Array('1','2','4','5','6','7','8','9','10');

У меня есть массив JavaScript и теперь хочу случайным образом выбрать из него четыре разных номера, а затем выразить их на странице (через document.write). Очевидно, каждый раз, когда страница перезагружается пользователем, она отображает четыре разных случайных числа.

4b9b3361

Ответ 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)]);