如何随机化EJS变量的顺序

How to randomize the order of EJS variables

我正在尝试创建一个包含多项选择题的测验。我正在使用 EJS 变量来显示问题、正确答案和其他 3 个错误选项。它会像这样显示。

问题:一米是多少厘米?

  1. 100cm
  2. 50cm
  3. 20cm
  4. 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>
 <% }) %>