基本的Javascript测验

Basic Javascript for Quiz

本文关键字:测验 Javascript      更新时间:2023-09-26

我正在使用Javascript创建一个非常基本的测验应用程序,并且想知道嵌套数组/对象的最佳方法是什么。我以前只用简单的一级嵌套就这样做过,但觉得这个项目可能需要更多。

测验需要有 5 个问题和多个答案。每个答案都有一个与之关联的分值。测验完成后,它将取分数的平均值,然后给你一个类型,即。"你不小心打了A","你大部分都打了B勾"等。类似于您在杂志上获得的测验。

我相信应该是这样的:

var quizList = {
    "question": "What's your favourite Color",
    "answerswers": {
         ["a","Blue","2"],
         ["b","Green","4"],
         ["c","Red","6"],
         ["d","Orange","8"],
     },
    "question": "What's your favourite Animal",
    "answerswers": {
         ["a","Dog","2"],
         ["b","Cat","4"],
         ["c","Caterpiller","6"],
         ["d","Donkey","8"],
     }
};

这是正确的吗,如果是,我将如何调用各种数组元素?

这是正确的吗

没有。这不是一个数组,它是一个包含嵌套对象文字和数组的对象文字。它还包含一个相当大的问题;您将用每个新问题/答案覆盖以前的问题/答案键。一个对象中不能有两个同名的属性。您已经有效地完成了此操作:

{ a: 'b', a: 'c' }

这将抛弃'b'并将a设置为'c'.

您可能需要重新考虑结构,以便顶级元素是一个数组:

var quizList = [
  {
    "question": "What's your favourite Color",
    "answerswers": [
         ["a","Blue","2"],
         ["b","Green","4"],
         ["c","Red","6"],
         ["d","Orange","8"],
      ]
   }, {
    "question": "What's your favourite Animal",
    "answerswers": [
         ["a","Dog","2"],
         ["b","Cat","4"],
         ["c","Caterpiller","6"],
         ["d","Donkey","8"],
     ]
  }
];

。如果是这样,我将如何调用各种数组元素?

而且你不能"调用"这些数组元素。它们不是可执行代码,它们是哑数据。您需要编写一个使用此对象作为其输入的程序,并生成包含一系列<input><select>元素的<form>

我相信

最好的方法是这样的:

var quizList = [{ 
  question: "What's your favourite Color",
  alternatives: [
    { letter: "a", text: "Blue", value: "2" },
    { letter: "b", text: "Green", value: "4" },
    { letter: "c", text: "Red", value: "6" },
    { letter: "d", text: "Orange", value: "8" },
  ]
}, { 
   /* other question */
}];

如前所述,您的quizList不是一个数组。

这部分是无效的:

"answerswers": {
     ["a","Dog","2"],
     ["b","Cat","4"],
     ["c","Caterpiller","6"],
     ["d","Donkey","8"],
 }

answers是一个对象(因为{}(,所以它需要一个键和一个值。也许你的意思是:

"answerswers": [
     ["a","Dog","2"],
     ["b","Cat","4"],
     ["c","Caterpiller","6"],
     ["d","Donkey","8"],
 ]

现在是一个包含 4 个嵌套数组的数组。

但我宁愿把它改成这样:

"answerswers": [{
         letter: "a",
         text: "Dog",
         value: "2"
     },
     //...etc
 ]

通过使选项对象而不是数组,您可以更可靠地获取每个答案的属性。所以代替:

var letter = someAnswer[0];       // is this the right index??

您可以这样做:

var letter = someAnswer.letter;   // now I know it's the right one

您的代码将更容易以这种方式维护,并且您不必记住哪个索引是答案的哪个部分。

总的来说,我会选择这样的东西:

var quizList = [{
        question: "What's your favourite Color",
        answers: [{ 
                 letter: "a",
                 text: "Dog",
                 value: "2"
            },
            // etc
        ]
    },
    // etc
];

现在在顶层quizList是一个对象数组,每个对象都有一个属性question和另一个属性answers,后者是具有属性 lettertextvalue 的对象数组。

var quizList={
            "questions":[
              {
                "question": "What's your favourite Color",
                "answerswers": {
                               "a":{
                                     "text":"Blue",
                                     "point":"2"
                                   },
                                "b":{
                                     "text":"Green",
                                     "point":"4"
                                   },
                                "c":{
                                     "text":"Red",
                                     "point":"6"
                                   }
                                  "d":{
                                     "text":"Orange",
                                     "point":"8"
                                   }

                         }
               },
               {
                "question": "What's your favourite Animal",
                 "answerswers": {
                               "a":{
                                     "text":"Dog",
                                     "point":"2"
                                   },
                                "b":{
                                     "text":"Cat",
                                     "point":"4"
                                   },
                                "c":{
                                     "text":"Monkey",
                                     "point":"6"
                                   }
                                  "d":{
                                     "text":"Donkey",
                                     "point":"8"
                                   }

                         }
               }

          ]
    };

尝试使用 json 格式执行此操作。