下面我创建了两个循环。
基本上它首先遍历包含4个值的随机数发生器数组。然后随机生成一个介于0和3之间的数字,并以随机顺序选择randomizer数组中的一个值到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);
答案 0 :(得分:1)
你的'wa'循环没用:它为'wrongAnswers'分配了三次随机值。但最后,你只有一个值。
另一个问题是,如果'wrongAnswers'没有通过indexOf()条件,则没有'再试一次'。在这种情况下,没有任何内容插入到该迭代中。
我建议采用一种更简单的方法:构建一个包含4个随机错误答案的数组,并用好的答案替换其中一个。
var goodAnswer = 21,
allAnswers = [],
wrongAnswer, wa;
for(wa = 0; wa < 4; wa++) {
do {
wrongAnswer = Math.floor((Math.random() * 100) + 1);
} while(wrongAnswer == goodAnswer || allAnswers.indexOf(wrongAnswer) !== -1);
allAnswers.push(wrongAnswer);
}
allAnswers[Math.floor(Math.random() * 4)] = goodAnswer;
我省略了HTML部分,但是你可以在构建数组后轻松完成。
修改
或者如果你真的想在同一个循环中处理HTML,你也可以在循环之前确定好答案的位置,以便每个位置的性质(错误或好)从一开始就是众所周知的。现在,您不必在之后覆盖其中一个错误的答案,并且可以安全地在循环内创建按钮。
var goodAnswer = 21,
gaPosition = Math.floor(Math.random() * 4),
allAnswers = [],
buttonArea = $("#answerOptions"),
answer, n;
for(n = 0; n < 4; n++) {
if(n == gaPosition) {
answer = goodAnswer;
}
else {
do {
answer = Math.floor((Math.random() * 100) + 1);
} while(answer == goodAnswer || allAnswers.indexOf(answer) !== -1);
}
allAnswers.push(answer);
input = $('<div class="col-xs-6"><button class="btn btn-primary answerButton">'+ answer +'</button></div>');
input.appendTo(buttonArea);
}