Javascript:我在哪里放Math.floor(Math.random)?

时间:2014-06-28 20:26:46

标签: javascript math random floor

好吧,我显然是一个极端的新手,所以要温柔。当我正在学习Javascript时,我正在创建一个测验,以更好地帮助我保留和练习信息。以下是我目前为止的代码示例(此问题已缩短实际数组)。

我在学习进度的这一点上工作得很好,除了我似乎无法使用Math.floor(Math.random())来创建非线性q&一种体验。

var qAndA = [["What starts a variable?", "var"], 
["What creates a popup with text and an OK button?", "alert()"],  
["What is the sign for a modulo?", "%"]];
function askQuestion(qAndA) {
    var answer = prompt(qAndA[0], " ");    
    if (answer === qAndA[1]) { 
        alert("yes");
    } else {
        alert("No, the answer is " + qAndA[1]);
    }
}
for (i = 0; i < qAndA.length; i++) {
    askQuestion(qAndA[i]);
} 

我已经在这里和其他地方看过所有可能的答案,但没有解决这个问题。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在数组中选择随机元素的最简单方法:

var randomIndex = Math.floor(Math.random() * qAndA.length)
var randomQuestion = qAndA[randomIndex]

现在把它放在一个循环中:

var questionsToAsk = qAndA.length
for (i = 0; i < questionsToAsk; i++) {
    var randomIndex = Math.floor(Math.random() * qAndA.length)
    var randomQuestion = qAndA[randomIndex]
    askQuestion(randomQuestion);
} 

答案 1 :(得分:0)

中使用| 0的速度更快
const randomIndex = Math.random() * qAndA.length | 0;
const randomQuestion = qAndA[randomIndex];

| 0是二进制为0,JavaScript规范有效地说结果在|发生之前转换为整数。请注意,| 0Math.floor不同。 | 0向下舍入为0,而Math.floor向下舍入。

         | 0   Math.floor         
------+------+------------
  2.5 |   2  |   2
  1.5 |   1  |   1
  0.5 |   0  |   0
 -0.5 |   0  |  -1
 -1.5 |  =1  |  -2
 -2.5 |  -2  |  -3