我有一个函数应该用于随机重定向到另一个页面:
function () {
var rand_exp = ['v', 'a'];
var pick_exp = function(expType) {
return expType[Math.floor(Math.random()*expType.length)];
}
if (pick_exp(rand_exp) === 'v') {
window.location.replace("experiment_v.html");
} else if (pick_exp(rand_exp) === 'a') {
window.location.replace("experiment_a.html");
}
}
我已经对此进行了多次测试,似乎发生了三件事中的一件,它要么重定向到 if 和 else if 语句中的两个子句之一,要么重定向到上面嵌入了 javascript 的页面,在这种情况下,我只有一个空白屏幕,这是预期的吗?
最佳答案
我想我应该把上面的评论变成一个正确的答案,这个答案的简短版本是肯定的,有两种以上可能的结果。
加长版
您的函数pick_exp
已正确实现,因此它将选择输入数组的一个元素。问题是您多次调用它并期望数组的元素在结果中均匀表示。
在第一个条件中,您第一次调用pick_exp
。结果可能是“a”或“v”,这将导致表达式为真或为假,每种情况的概率为 50%。如果为 false,则您再次调用它,它会选择一个新值,该值可能是等概率独立的“a”或“v”,或者是您上次调用它时的结果,因此第二个表达式也有 50% 的机会返回 false,这意味着您从函数返回,而没有发生重定向。总体而言,实际重定向的可能性约为 50%。
固定代码如下所示:
function () {
var rand_exp = ['v', 'a'];
var pick_exp = function (expType) {
expType[Math.floor(Math.random()*expType.length)];
};
var result = pick_exp(rand_exp);
if (result === 'v') {
window.location.replace("experiment_v.html");
} else if (result === 'a') {
window.location.replace("experiment_a.html");
}
}
您可以在没有该函数的情况下完成此操作,并得到如下所示的结果:
function () {
var rand_exp = ['v', 'a'];
var pick_exp = rand_exp[Math.floor(Math.random()*rand_exp.length)];
if (pick_exp === 'v') {
window.location.replace("experiment_v.html");
} else if (pick_exp === 'a') {
window.location.replace("experiment_a.html");
}
}
上述代码恰好产生两个可能的路径:'v' ->experiment_v.html
和 a ->experiment_a.html
。
或者,您可以直接使用结果:
function () {
var rand_exp = ['v', 'a'];
window.location.replace("experiment_" + rand_exp[Math.floor(Math.random()*rand_exp.length)] + ".html");
}
关于javascript - 该函数是否有两种以上的可能结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834347/