【发布时间】:2016-07-02 10:11:16
【问题描述】:
下面我创建了两个循环。
基本上,它首先遍历包含 4 个值的随机数数组。然后随机生成一个介于 0 和 3 之间的数字,并从随机数数组中选择一个值以随机顺序返回到 console.log(例如2,0,3,1)。
下一个循环是随机创建错误答案。如果 allAnswers 数组中不存在此错误答案,则会将其推送到数组中。
然后循环并创建一个按钮,作为用户可以选择的答案。
所有这一切都完美无缺。除了我的 allAnswers 数组返回 13 个值时,它应该只有 4 个(其中 1 个是我预先确定的值 21)。
我需要它来创建 4 个按钮,每个按钮通过数组位置在 0-3 之间的答案,并返回这些唯一值而不说未定义。所以我不确定在这种情况下我做错了什么?
var allAnswers = [21],
randomizer = [0, 1, 2, 3],
random = 0,
buttonArea = $("#answerOptions");
for (randomizer, r = randomizer.length; r--; ) {
random = randomizer.splice(Math.floor(Math.random() * (r + 1)), 1)[0];
// console.log(random);
// Generates 3 random wrong answers
for(wa = 0 ; wa < 3; wa++) {
wrongAnswers = Math.floor((Math.random() * 100) + 1);
}
// Pushes wrong answers to array
if (allAnswers.indexOf(wrongAnswers) === -1) {
allAnswers.push(wrongAnswers);
}
console.log(random);
input = $('<div class="col-xs-6"><button class="btn btn-primary answerButton">'+ allAnswers[random] +'</button></div>');
input.appendTo(buttonArea);
}
console.log(allAnswers);
编辑:
在建议的新循环中添加
var goodAnswer = 21,
allAnswers = [],
wrongAnswer,
wa,
buttonArea = $("#answerOptions");
for(wa = 0; wa < 4; wa++) {
do {
wrongAnswer = Math.floor((Math.random() * 100) + 1);
} while(wrongAnswer == goodAnswer || allAnswers.indexOf(wrongAnswer) !== -1);
allAnswers.push(wrongAnswer);
input = $('<div class="col-xs-6"><button class="btn btn-primary answerButton">'+ allAnswers +'</button></div>');
input.appendTo(buttonArea);
}
allAnswers[Math.floor(Math.random() * 4)] = goodAnswer;
console.log(goodAnswer);
console.log(allAnswers);
console.log(wa);
【问题讨论】:
-
不需要很长时间,不到5ms -> jsfiddle.net/zsyuxph7
-
如果你删除代码中间的
console.log(),它需要不到2ms -> jsfiddle.net/zsyuxph7/1 -
我确实看到了该循环返回未定义值的情况? :)
-
这是另一个问题,虽然我认为这可能是因为
randomizer.splice()返回未定义。也尝试在使用它们之前定义你的变量 -
好吧,我并不关心创建阵列需要多长时间。我在问为什么它在实际循环的 4 次中返回一个包含 13 个值的数组。因为我一直想弄清楚为什么数组这么大。
标签: javascript html arrays random