如何随机化EJS变量的顺序
How to randomize the order of EJS variables
我正在尝试创建一个包含多项选择题的测验。我正在使用 EJS 变量来显示问题、正确答案和其他 3 个错误选项。它会像这样显示。
问题:一米是多少厘米?
- 100cm
- 50cm
- 20cm
- 10cm
变量是这样的(我用一个for循环来显示所有问题)
<%=Quizz[i].Question%>
<%=Quizz[i].Right_Answer%>
<%=Quizz[i].Wrong_Answer_1%>
<%=Quizz[i].Wrong_Answer_2%>
<%=Quizz[i].Wrong_Answer_3%>
所以我遇到的问题是我想为每个问题打乱并更改正确答案的位置。所以对于一个问题,它将是第一个选项,而对于另一个问题,正确答案可能是第三个选项 etc.Is 有办法实现吗?
将 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
如何将答案保存在一个单独的数组中,在服务器端洗牌这个数组并将这个数组传递给你只是迭代数组的 ejs?下面是一些可以帮助您入门的伪代码:
// in your node request handler
// shuffle is taken from
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 变量来显示问题、正确答案和其他 3 个错误选项。它会像这样显示。
问题:一米是多少厘米?
- 100cm
- 50cm
- 20cm
- 10cm
变量是这样的(我用一个for循环来显示所有问题)
<%=Quizz[i].Question%>
<%=Quizz[i].Right_Answer%>
<%=Quizz[i].Wrong_Answer_1%>
<%=Quizz[i].Wrong_Answer_2%>
<%=Quizz[i].Wrong_Answer_3%>
所以我遇到的问题是我想为每个问题打乱并更改正确答案的位置。所以对于一个问题,它将是第一个选项,而对于另一个问题,正确答案可能是第三个选项 etc.Is 有办法实现吗?
将 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
如何将答案保存在一个单独的数组中,在服务器端洗牌这个数组并将这个数组传递给你只是迭代数组的 ejs?下面是一些可以帮助您入门的伪代码:
// in your node request handler
// shuffle is taken from
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>
<% }) %>