b. *_*eck 8 javascript arrays algorithm shuffle
我为我的艺术家朋友创建了一个网站,她希望布局保持不变,但她也希望她制作的新画作能够混合到当前版面中.所以我在主画廊页面上有12个缩略图(thumb1 - thumb12),还有18个图像(img1 - img18)也可以放置
我想到的方法是创建一个包含所有图像的数组,随机化它,然后简单地刮掉前12个并将它们加载到拇指槽中.另一种方法是从阵列中随机选择12个图像.在第一种情况下,我找不到一种随机化数组元素的方法.在后一种情况下,除了使用第二个数组之外,我无法将我的大脑包围在如何防止图像加载多次,这看起来非常低效和可怕.
顺便说一句,我在Javascript中正在做所有这些.
Jer*_*amp 18
我刚刚写了这篇文章,它碰巧适合你想要的东西.我相信这是ojblass所指的Fisher-Yates shuffle:
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
};
Run Code Online (Sandbox Code Playgroud)
请注意,修改Array.prototype可能被视为错误形式.您可能希望将此实现为将数组作为参数的独立方法.无论如何,完成它:
var randomSubset = originalArray.shuffle().slice(0,13);
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想实际修改原始文件:
var randomSubset = originalArray.slice(0).shuffle().slice(0,13);
Run Code Online (Sandbox Code Playgroud)