Рандомизация элементов в массиве?

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

https://www.diawi.com/

8
задан Community 4 January 2015 в 19:51
поделиться

3 ответа

Я написал это некоторое время назад, и так получилось, что вы ищете. Я полагаю, что это случайный случай Фишера-Йейтса, на который ссылается ojblass:

Array.prototype.shuffle = function() {
   var i = this.length;
   while (--i) {
      var j = Math.floor(Math.random() * (i + 1))
      var temp = this[i];
      this[i] = this[j];
      this[j] = temp;
   }

   return this; // for convenience, in case we want a reference to the array
};

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

var randomSubset = originalArray.shuffle().slice(0,13);

Или, если вы не хотите фактически изменять оригинал:

var randomSubset = originalArray.slice(0).shuffle().slice(0,13);
18
ответ дан 5 December 2019 в 06:24
поделиться

Ваш первый подход сработает. Просто перемешайте 18 элементов и возьмите первые 12.

1
ответ дан 5 December 2019 в 06:24
поделиться

Вы должны реализовать тасование Фишера-Йейтса (также известное как тасование Кнута).

Посмотрите на отличный ответ, предоставленный здесь .

6
ответ дан 5 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: