2016-01-12 3 views
-2

Я хочу иметь массив с разными словами и фразами и случайным образом генерировать около пяти из них на странице обновления. Как мне это сделать в javascript?Случайно выберите несколько элементов из массива

+4

http://stackoverflow.com/questions/4550505/getting-random-value-from-an-array – Andy

+0

Где вы застряли? Вы не знаете, как создать случайное число из 0-n? Знаете ли вы, знаете, как петля получить пять из них? Вы не знаете, как получить элемент из массива, как только у вас есть случайный индекс? –

ответ

0

Вы можете использовать длину массива и запустить цикл, чтобы сделать это с Math.random():

var randomNums = []; 
for(var i=0; i<5; i++){ 
    int x = myArray[Math.random()*(myArray.length-1)]; 
    if(!randomNums.contains(x)){ 
     randomNums.push(x); 
    } 
} 

randomNums должен затем быть массив с пятью случайными значениями с другого массива

+0

Это может привести к дублированию. –

+0

@torazaburo проверить обновленный ответ – NiallMitch14

0

Пропустите цикл.
Каждый раз удаляйте 1 объект из исходного массива и помещайте его в новый.
Если вы хотите сохранить исходный массив, вы можете сделать копию.

var myArray = []; 
var myNewArray = []; 
for (var i=0; i<5; i++) { 
    myNewArray.push(myArray.splice(Math.random()*(myArray.length-1),1).pop()); 
} 

Вы также можете создать массив из 5 случайных чисел от 0 до myArray.length-1. Затем вам нужно проверить после каждого генерации случайных чисел, если сгенерированный номер уже находится в массиве.

var indexArr = []; 
while (indexArr.length < 5) { 
    var rndIndex = Math.random()*(myArray.length-1); 
    if (indexArr.indexOf(rndIndex) == -1) // if rndIndex is not in indexArr 
     indexArr.push(rndIndex); 
} 

Затем вы можете использовать indexArray для возврата 5 случайных элементов из исходного массива.

Смежные вопросы