Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   рандомный выбор нескольких значений из массива (https://javascript.ru/forum/dom-window/65478-randomnyjj-vybor-neskolkikh-znachenijj-iz-massiva.html)

Alekseyideas 21.10.2016 13:53

рандомный выбор нескольких значений из массива
 
Всем привет! Как можно выбрать из массива рандомно несколько элементов? Например вот такой массив из него нужно рандомно выбирать 5 изображений. Спасибо

var imgRand;
imgRand = [];
imgRand[0] = "img/1.png";
imgRand[1] = "img/2.png";
imgRand[2] = "img/3.png";
imgRand[3] = "img/4.png";
imgRand[4] = "img/5.png";
imgRand[5] = "img/6.png";
imgRand[6] = "img/7.png";
imgRand[7] = "img/8.png";
imgRand[8] = "img/9.png";
imgRand[9] = "img/10.png";
imgRand[10] = "img/11.png";

ksa 21.10.2016 13:58

Цитата:

Сообщение от Alekseyideas
Как можно выбрать из массива рандомно несколько элементов?

В цикле использовать метод
http://javascript.ru/math.random

Alekseyideas 21.10.2016 14:03

ksa,
тип того ?
for (var i = 0; i < 5; i++) {
  var a = Math.floor(Math.random() * img.length);
}

ksa 21.10.2016 14:15

Цитата:

Сообщение от Alekseyideas
тип того ?

Да, если повторения не страшны...

Если без повторений - нужно немного усложнить.

Alekseyideas 21.10.2016 14:26

ksa,
нужно что бы без повторений, а то получается с повторениями(((

ksa 21.10.2016 14:53

Цитата:

Сообщение от Alekseyideas
нужно что бы без повторений

Тогда нужно делать:
- еще один массив (ЕОМ), где значениями будут индексы исходного массива (ИМ)
- выбирать (как делал ранее) случайно элемент из ЕОМ, это искомый индекс в ИМ
- потом удалять этот элемент или "переставлять" его в конец ЕОМ
Вот таким макаром можно избежать повторений.

Vlasenko Fedor 21.10.2016 15:07

var images = [
    "img/1.png",
    "img/2.png",
    "img/3.png",
    "img/4.png",
    "img/5.png",
    "img/6.png",
    "img/7.png",
    "img/8.png",
    "img/9.png",
    "img/10.png",
    "img/11.png"
];
function randomArray(arr, len) {
    arr.sort(function () {
        return Math.random() > 0.5
    });
    arr.length = len;
    return arr;
}
alert(randomArray(images, 5));
alert(randomArray(images, 3));
:write:
данный пример генерит не совсем рандомную случайность.
так у первых элементов шансов быть в результате больше
смотрите array shuffle js

Alekseyideas 21.10.2016 15:18

Poznakomlus,
Спасибо за помощь всем!!!!!


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