好吧,我显然是一个极端的新手,所以要温柔。当我正在学习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]);
}
我已经在这里和其他地方看过所有可能的答案,但没有解决这个问题。
有人可以帮助我吗?
答案 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规范有效地说结果在|
发生之前转换为整数。请注意,| 0
与Math.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