Вопрос

Я создал сайт для своего друга-художника, и она хочет, чтобы макет остался прежним, но она также хочет, чтобы новые картины, которые она произвела, были добавлены в текущий макет. Итак, у меня есть 12 миниатюр (thumb1 - thumb12) на главной странице галереи и 18 изображений (img1 - img18) для размещения

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

Кстати, я делаю все это в Javascript.

Это было полезно?

Решение

Я написал это некоторое время назад, и так получилось, что вы ищете. Я считаю, что это случай Фишера-Йейтса, на который ссылается 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 элементов и возьмите первые 12.

Недавно я сам столкнулся с этой проблемой. Пост здесь помог: http://waseemsakka.com/2012/02/14/javascript-dropping-the-last-parts-of-an-array-and-randomizing-the-order-of -an-array / .

Начнем с рандомизации массива:

thumbs.sort(function(a, b) {
     return Math.random() - 0.5;
})

Это позволит рандомизировать порядок ваших 18 элементов. Тогда, чтобы сохранить только первые 12 элементов, вы просто отбросите последние 6:

thumbs.length = 12;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top