Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Масив с рандомным выпадением заданонго ряда (https://javascript.ru/forum/misc/66442-masiv-s-randomnym-vypadeniem-zadanongo-ryada.html)

Petral2002 15.12.2016 16:05

Масив с рандомным выпадением заданонго ряда
 
Здравствуйте есть массив допустим из n чисел,подскажите код который может показывать рандомно одно число из этого массива ,массив должен повторяться ровно столько раз сколько чисел было задано ,допустим задан массив 1,2,3,4,5 он должен показать 3,2,1,4,5 (в любой последовательности но,все пять чисел по очереди(за один раз показывается только одно число) и не повторять уже выпавшее число раньше ) скажу что мне нужен массив из 300 чисел

laimas 15.12.2016 16:33

Берем массив, формируем случайный его индекс от 0 до длина_массива - 1, отображаем полученное, удаляем из массива отображенный индекс, повторяем сначала. Либо запоминать ранее отображенный индекс, но это заново формировать новый случайный, пока не будет повтора.

Petral2002 15.12.2016 18:45

спасибо за быстрый ответ,но я не совсем понял ,формирование его случайного индекса может повторить индекс ,а я его из масива удалил....ятак понимаю случайную формировку индекса нужно с помощью гсч выбирать и выводить ее на экран ,а если гсч выдаст опять то же число

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

Dilettante_Pro 15.12.2016 18:50

Petral2002,
Цитата:

Сообщение от Petral2002
формирование его случайного индекса может повторить индекс ,а я его из масива удалил....

По алгоритму laimas
var arr = [1,2,3,4,5],
      i;
while(arr.length > 0) {
   i = Math.round(Math.random() * (arr.length - 1));
   alert(arr[i]);
   arr.splice(i,1);
}

Индекс может и повторится, но массив уже сократился и сдвинулся. Дырок нет.

Petral2002 15.12.2016 19:29

попробую Спасибо большое ,то что нужно !


Часовой пояс GMT +3, время: 21:05.