解决了! - 从switch语句更改为array ... ups后,没有更新我的随机数生成。 - 谢谢!
制作一个网络漫画,并想要其中一个"随机"按钮,您可以跳到任何条带。我假设最好的方法是在后端(PHP或类似),但我想用JavaScript做。
我已经选择了一个随机页面,但问题是它有时会重定向到它已经在的页面(或者更确切地说,直到我有更多的页面)。如果当前页面与目标页面相同,我试图让页面从数组中删除,而是最终我被重定向到" http://bcitcomp.ca/students/hsloman/Comp1850/final/undefined
"
我甚至确保使用splice而不是delete。不重新索引列表吗?
var pickRandomPage = function () {
// random Pages available
var links = [
"construction.html",
"placeholder.html",
"noplaymobil.html"];
// current Page
var currentURL = window.location.href;
var currentPage = currentURL.substr(currentURL.lastIndexOf('/')+1);
// get rid of current page from array of options
for(var i = 0; i < links.length; i++){
if(links[i] == currentPage){
links.splice(i,1);
}
}
// get a random number, rounded number between 0 and number of links
var randomPage = Math.floor((Math.random() * 3) + 1);
var link = 'http://bcitcomp.ca/students/hsloman/Comp1850/final/' + links[randomPage];
// open it
window.open(link,"_self");
};
答案 0 :(得分:2)
但我最终被重定向到“http://bcitcomp.ca/students/hsloman/Comp1850/final/undefined”
undefined
是因为您的randomPage
变量将包含1
和3
之间的数字,但links
数组中的实际有效索引仅为0
或1
,因为删除当前网页网址后只有两个元素。
变化:
var randomPage = Math.floor((Math.random() * 3) + 1);
为:
var randomPage = Math.floor(Math.random() * links.length);
答案 1 :(得分:1)
将此权利放在window.open(...)
行之前:
if(link === window.location+"") return pickRandomPage();
这就是说,“如果选择的链接是我们已经在的页面,请再次运行该功能”。所以它将继续尝试,直到给出新的页面。这比尝试拼接数组更容易。
有关详细信息,请参阅:recursion。