我正试图创建一个有选择题的测验,我使用EJS变量来显示问题、正确答案和其他3个错误选项。我使用EJS变量来显示问题,正确答案和其他3个错误选项。它将diplay有点像这样。
问题。一米有多少厘米?
变量是这样的(我用for循环来显示所有问题)
<%=Quizz[i].Question%>
<%=Quizz[i].Right_Answer%>
<%=Quizz[i].Wrong_Answer_1%>
<%=Quizz[i].Wrong_Answer_2%>
<%=Quizz[i].Wrong_Answer_3%>
所以,我的问题是,我想充分和改变每个问题的正确答案的位置,所以对于一个问题,它将是第一个选项和另一个问题的正确答案可能是第三选项等。
将答案保存在一个单独的数组中,在服务器端对这个数组进行洗牌,然后将这个数组传递给ejs,在那里你只需对这个数组进行迭代,怎么样?这里有一些伪代码,应该可以帮助你开始使用。
// in your node request handler
// shuffle is taken from https://stackoverflow.com/a/12646864/3761628
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
...
const answers = [{isCorrectAnswer:true},{isCorrectAnswer:false},{isCorrectAnswer:false},{isCorrectAnswer:false}];
shuffle(answers);
// pass the question and the answers to ejs
res.render('...', {question, answers});
// in your ejs:
<%=question%>
<% answers.forEach(function(item,index){ %>
<li> <%= item %> </li>
<% }) %>
把EJS变量的值传给一个单独的javascript函数,然后在那里进行洗牌。最好是在服务器端设置,因为逻辑应该在控制器上完成,而不是视图工作。
function shuffle(array) {
array.sort(() => Math.random() - 0.5);
}
let answers = [
Quizz[i].Right_Answer,
Quizz[i].Wrong_Answer_1,
Quizz[i].Wrong_Answer_2,
Quizz[i].Wrong_Answer_3
];
shuffle(answers);
// answers are shuffled