三元语句中的随机数

时间:2013-09-05 14:41:33

标签: javascript random

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

3 个答案:

答案 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