我借了这个脚本(有3页),又增加了2页。问题是它只在列表中的前3个之间随机化。我不太喜欢三元组if / else。如果n大于3,则为0.否则如果n大于8,则为1.否则为2?我做对了吗?这似乎是一种奇怪的方式。如何让它在1到5之间随机化?
<script type="text/javascript">
(function(n){
var pages = ['Happy.html', 'Sad.html', 'Pensive.html', 'Eager.html', 'Inquisitive.html'];
n = n < 3? 0 : n < 8? 1 : 2;
window.location.replace(pages[n]);
})(Math.floor(Math.random() * 10));
</script>
答案 0 :(得分:1)
这样做:
<script type="text/javascript">
(function(n){
var pages = ['Happy.html', 'Sad.html', 'Pensive.html', 'Eager.html', 'Inquisitive.html'];
window.location.replace(pages[n]);
})(Math.floor(Math.random() * 5)); // Gets a random number between 0 and 4
</script>
或调用此函数借用here:
<script type="text/javascript">
function randomFromInterval(from, to)
{
return Math.floor(Math.random() * (to - from + 1) + from);
}
(function(n){
var pages = ['Happy.html', 'Sad.html', 'Pensive.html', 'Eager.html', 'Inquisitive.html'];
window.location.replace(pages[n - 1]);
})(randomFromInterval(1, 5)); // Gets a random number between 1 and 5
</script>
答案 1 :(得分:1)
你不需要三元运算符..你可以这样做
function(n){
//everything except the ternary operator
}(Math.floor(Math.random()*10)%5)
此表达式的输出随机介于0和4之间,而不是1和5.这是必需的,因为5个元素的数组的索引介于0和4之间。
答案 2 :(得分:1)
为了完全理解您提供的三元语句,您需要了解JavaScript中的运算符优先级。
请查看此文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
你对三元语句将如何执行是正确的。
n = n < 3? 0 : n < 8? 1 : 2;
可以翻译成
if (n < 3) {
n = 0;
}
else if (n < 8) {
n = 1;
}
else {
n = 2;
}
因此,更清楚地了解发生了什么。
而且,这是你如何得到随机的。
function randInt(n, min) {
return (Math.floor(Math.random() * n)) + (min || 0);
}
var r = randInt(5, 1); // get random number from 1 to 5