一尘不染

将数组中的元素随机化?

algorithm

我已经为我的一个艺术家朋友创建了一个网站,她希望布局保持不变,但是她还希望将自己制作的新画作混入当前布局。所以我在主图库页面上有12个缩略图(thumb1-thumb12)和18个图像(img1-img18)也要放置

我想到的方法是创建一个包含所有图像的数组,将其随机化,然后简单地刮掉前12个并将它们加载到拇指槽中。另一种方法是从阵列中随机选择12张图像。在第一种情况下,我找不到随机化数组元素的方法。在后一种情况下,除了使用第二个数组(看起来非常低效和令人恐惧)之外,我无法全神贯注于如何防止图像多次加载。

顺便说一下,我正在用Javascript完成所有这些工作。


阅读 351

收藏
2020-07-28

共1个答案

一尘不染

我之前写过这篇文章,恰好适合您的需求。我相信ojblass指的是Fisher-Yates洗牌:

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);
2020-07-28