【问题标题】:How to randomize the order of EJS variables如何随机化 EJS 变量的顺序
【发布时间】:2020-09-06 14:59:33
【问题描述】:

我正在尝试创建一个包含多项选择题的测验。我正在使用 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%>

所以我遇到的问题是我想为每个问题调整并改变正确答案的位置。所以对于一个问题,它将是第一个选项,对于另一个问题,正确答案可能是第三个选项等。有没有办法实现这一点?

【问题讨论】:

    标签: javascript html node.js sorting ejs


    【解决方案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>
     <% }) %>
    

    【讨论】:

    • Actaully 我也考虑过这一点,但是由于我一次显示多个问题,如果我将问题和答案放在单独的数组中,我有点困惑如何链接它们。有什么建议吗?
    • @Manohara 你快到了。只需将属性Quizz[i].Wrong_Answer_1Quizz[i].Wrong_Answer_2 等替换为Quizz[i].Answer[j]。保留Right_Answer 属性,因为您需要对照它检查您的答案
    【解决方案2】:

    将 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 变量中的值传递给一个单独的 javascript 函数,然后在那里打乱?
    • 如果我处理大约 100 个左右的问题,这会比在服务器端执行此操作更快吗?
    • 当然最好在服务器端进行设置。但是:您的 Ejs 是在服务器端执行的,不是吗?无论如何,逻辑应该在控制器上完成,这不是视图工作。
    猜你喜欢
    • 2013-02-04
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多