Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Несколько неповторяющихся случайных картинок (https://javascript.ru/forum/misc/33903-neskolko-nepovtoryayushhikhsya-sluchajjnykh-kartinok.html)

divalinq 13.12.2012 15:21

Несколько неповторяющихся случайных картинок
 
У мення есть массив, его элементы это пути до картинок.
var images = new Array( 
  "img/1.jpg",
  "img/2.jpg",
  "img/3.jpg",
...
  "img/20.jpg"
);

Мне нужно вывести 5 случайных картинок из этого массива. Делаю так:
for (var i = 0; i < 5; i++) {
  var a = Math.floor(Math.random() * images.length);
  document.write ("<div class='photo'><img src ='"+images[a]+"' /></div>");
};

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

Подскажите, как лучше сделать, чтобы они не повторялись и чтобы гарантированно выводилось 5 штук.

a_l 13.12.2012 17:00

images.sort(function() { return Math.random() - 0.5; }).length = 5;

nerv_ 13.12.2012 17:13

Цитата:

Сообщение от Дзен-трансгуманист
source.length < count ? count = source.length : 0;

О_о

a_l 13.12.2012 17:22

Цитата:

Так будет статистически неравномерно. Попробуй, к примеру, на массивах из 3-4 значений сделать 10000 выборок не изменяя при этом оригинал. Ты увидишь, что одних комбинаций будет ощутимо больше, чем других.
Не думаю, что для ТС это критично. Если случайность не устраивает, можно дважды отсортировать.

divalinq 14.12.2012 19:59

Благодарю :)

Deff 17.12.2012 19:09

<script type="text/javascript">
var images = new Array( 
  "img/1.jpg",
  "img/2.jpg",
  "img/3.jpg",
...
  "img/20.jpg"
);
var img = images;
for (var i = 0; i < 5; i++) {
  var a = Math.floor(Math.random() * img.length);
  document.write ("<div class='photo'><img src ='"+img[a]+"' /></div>");
  img.splice(a,1);
};
</script>

Deff 17.12.2012 19:57

Поправил


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