如何随机化EJS变量的顺序?

问题描述 投票:0回答:1

我正试图创建一个有选择题的测验,我使用EJS变量来显示问题、正确答案和其他3个错误选项。我使用EJS变量来显示问题,正确答案和其他3个错误选项。它将diplay有点像这样。

问题。一米有多少厘米?

  1. 100厘米
  2. 50厘米
  3. 20厘米
  4. 10厘米

变量是这样的(我用for循环来显示所有问题)

<%=Quizz[i].Question%>
<%=Quizz[i].Right_Answer%>
<%=Quizz[i].Wrong_Answer_1%>
<%=Quizz[i].Wrong_Answer_2%>
<%=Quizz[i].Wrong_Answer_3%>

所以,我的问题是,我想充分和改变每个问题的正确答案的位置,所以对于一个问题,它将是第一个选项和另一个问题的正确答案可能是第三选项等。

javascript html node.js sorting ejs
1个回答
1
投票

将答案保存在一个单独的数组中,在服务器端对这个数组进行洗牌,然后将这个数组传递给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>
 <% }) %>

1
投票

把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
© www.soinside.com 2019 - 2024. All rights reserved.