改组HTML链接数组的问题

时间:2015-04-23 15:56:43

标签: javascript arrays shuffle

我正在运行一个网站,用户浏览子目录的唯一方法是通过随机页面(类似于维基百科的随机页面功能)。我已经实现了一个代码来调用随机页面并且它工作正常,但我希望最小化在onclick执行后再次调用同一页面的可能性。

我在研究一种更好的方法时偶然发现了Fisher-Yates-Knuth shuffle并尝试将其实现到我的脚本中:

Shop_Query     = np.array(['Cheese', 'Bread']

该脚本基本上可以正常工作,但它仍会导致连续两次甚至三次调用同一页面。我在JS方面还很陌生,所以如果有人能指出我正确的方向,那就太棒了。

1 个答案:

答案 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;
}