gpt4 book ai didi

javascript - 洗牌 HTML 链接数组的问题

转载 作者:行者123 更新时间:2023-11-29 10:40:42 26 4
gpt4 key购买 nike

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

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

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]
}

该脚本基本可以,但仍然会导致同一页面连续两次甚至三次调用。我在 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;
}

关于javascript - 洗牌 HTML 链接数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29828613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com