HTML 个链接的随机排列问题

Problems with shuffling array of HTML links

我是一个 运行 用户浏览子目录的唯一方式是通过随机页面(类似于维基百科的随机页面功能)的站点。我已经实现了调用随机页面的代码并且它工作正常,但我想尽量减少在 onclick 执行后再次调用同一页面的机会。

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

function Next() {
   var links = [];
   links[0] = "/arch/g1";
   links[1] = "/arch/g2";
   links[2] = "/arch/g3";
   links[3] = "/arch/g4";

   var m = links.length, t, i;
   while (m) {
      i = Math.floor(Math.random() * m--);
      t = links[m];
      links[m] = links[i];
      links[i] = t;
   }
   window.location = links[m]
}

脚本基本可以,但是还是会导致同一个页面连续调用2次甚至3次。我对 JS 还是很陌生,所以如果有人能给我指明正确的方向就太好了。

每次调用 Next() 函数都是随机排列链接数组并从数组中获取一个索引。你有 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;
}