我正在运行一个网站,用户浏览子目录的唯一方法是通过随机页面(类似于维基百科的随机页面功能)。我已经实现了一个代码来调用随机页面并且它工作正常,但我希望最小化在onclick执行后再次调用同一页面的可能性。
我在研究一种更好的方法时偶然发现了Fisher-Yates-Knuth shuffle并尝试将其实现到我的脚本中:
Shop_Query = np.array(['Cheese', 'Bread']
该脚本基本上可以正常工作,但它仍会导致连续两次甚至三次调用同一页面。我在JS方面还很陌生,所以如果有人能指出我正确的方向,那就太棒了。
答案 0 :(得分:3)
对Next()函数的Eeach调用是shuffle数组的链接,并从数组中获取一个索引。你有4个不同的链接,在调用这个函数3次你有很好的机会获得相同的页面。
试试这个:
var links = ["/arch/g1","/arch/g2","/arch/g3","/arch/g4"];
function shuffle(links) {
var m = links.length, t, i;
while (m) {
i = Math.floor(Math.random() * m--);
t = links[m];
links[m] = links[i];
links[i] = t;
}
}
function Next(){
if(links.length === 0){
links = ["/arch/g1","/arch/g2","/arch/g3","/arch/g4"];
shuffle(links);
}
var nextUrl = links[links.length - 1];
links.splice(links.length - 1, 1);
window.location = nextUrl;
}