1

我借了这个脚本(有 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>
4

3 回答 3

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>

或者调用从这里借来的这个函数:

<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>
于 2013-09-05T14:53:09.487 回答
1

你不需要三元运算符..你可以这样做

function(n){
//everything except the ternary operator
}(Math.floor(Math.random()*10)%5)

该表达式的输出随机地介于 0 和 4 之间。不是 1 和 5。这是必需的,因为 5 个元素的数组的索引介于 0 和 4 之间。

于 2013-09-05T14:54:16.187 回答
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
于 2013-09-05T14:55:55.267 回答