var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
var random = Math.round(Math.random() * 4);
var previous = [];
previous.push(random);
for (var i = 0; i < previous.length; i++) {
while (previous[i] == random) {
random = Math.round(Math.random() * 4);
}
}
window.location = links[random];
所以我这里有代码。它的目的是,一旦使用谷歌网站上的按钮启动,随机引导用户到其中一个设置站点。我需要它是记住它采取的网站(通过记住Math.random输出)。现在,每次运行代码(模拟用户多次点击按钮),它都会擦除我的内存数组'previous'。我希望此代码为其输出的站点打开一个单独的窗口。无论是使用cookies,iframe还是其他方法,如果有人能帮助我,我将非常感激。
我目前正在阅读关于Javascript的Codecademy课程,所以请理解我是否遗漏了一些简单的内容:)
答案 0 :(得分:2)
你需要一个全球性的。
使用
var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
var random = Math.round(Math.random() * 4);
window.previous = window.previous || [];
window.previous.push(random);
for (var i = 0; i < window.previous.length; i++) {
while (window.previous[i] == random) {
random = Math.round(Math.random() * 4);
}
}
window.location = links[random];
答案 1 :(得分:0)
您的解决方案存在一些问题:
window.location = ...
)时,您将丢失所有变量。如果您导航到新页面,即使将其附加到窗口,也无法保留以前的阵列。for
while
循环while
并没有按照您的想法行事。它应该确保你得到一个尚未使用的数字,但是有一个错误:内部for
可以选择一个随机数字,在你走了之后就在前一个数组中进入previous = [0,2]
。即如果for
,当previous[1] == random
循环检查0
时,它可以选择previous[0]
作为新的随机数,即使它是contains
的值{1}}。要解决此问题,首先必须在新窗口中开始打开页面。有关如何执行此操作的详细信息,请参阅this SO answer。
其次,您需要更好地确保先前的数组不包含该值。 function contains(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) return true;
}
return false;
}
函数的简单实现是:
var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
var visited = [];
// Assumes you have an element like <button id='btn'>Click me</button>
var button = document.getElementById('btn');
button.addEventListener('click', function() {
// If we've visited all the links, don't try redirecting again
if (visited.length == links.length) {
alert('You visited all the links');
return;
}
// Variables to hold our random number and link
var random, url;
// Keep getting a new random url while it's one we've already visited
do {
random = Math.round(Math.random() * 3);
url = links[random];
} while (contains(visited, url));
// We have a url we haven't visited yet; add it to the visited array
visited.push(url);
// Open the link in a new window so we can hold on to the visited array in this window
var win = window.open(url, '_blank');
win.focus();
});
// A simple function to check if an array contains a value
function contains(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) return true;
}
return false;
}
以下是您正在寻找的工作JS小提琴:http://jsfiddle.net/pnP4D/7/
我保留一个访问过的数组来存储您访问过的链接;你可以像以前的数组一样容易地保存它并存储随机数。
{{1}}