【问题标题】:Is it possible to execute a loop inside an object declaration in JavaScript是否可以在 JavaScript 的对象声明中执行循环
【发布时间】:2018-03-01 18:50:12
【问题描述】:

我正在创建一个包含多项选择题的测验。问题和答案是从外部 xml 文件加载的。答案选项的数量并不一致。它可以变化。我正在从 xml 文件加载数据并将其转换为测验应用程序可以访问的全局 JSON 对象。有没有办法遍历 answers 对象声明中的答案?整个对象当前看起来像这样(注意currentQuestion 是对正在读取的 xml 的变量引用):

var questionAnswerContentObject = {
    question: {
      questionTitle: currentQuestion.find("questionTitle").text(),
      questionBody: currentQuestion.find("questionBody").text()
    },
    answers: {
      // this is where the answers are supposed to go. 
      // the loop is just dummy test code. it fails with "Parsing error: Unexpected token ("
      for(var i=0;i<10;i++) {
        answer: i;
      }
    }
  };

【问题讨论】:

  • 这是一个很好的问题,您能否提供带有 html 内容的应用示例
  • @GNETODOMINIQUE:HTML 会为问题添加什么内容?

标签: javascript json xml


【解决方案1】:

您可以在使用数组初始化对象后添加其他答案。然后,您可以在阅读 XML 文件后使用 for 循环动态添加答案。您的对象可以设置为:

answer : {
    [
        answer1: {
        }
        ...
    ]
}

【讨论】:

    【解决方案2】:

    有没有办法遍历答案对象声明中的答案?

    不,你不能


    您可以做的是创建一个函数并初始化这些属性。

    • 要初始化属性答案,您可以使用IIFE 设置必要的答案数组。

    var questionAnswerContentObject = function() {
      this.question = {
        questionTitle: "title",
        questionBody: "body"
      };
    
      this.answers = (function() {
        // this is where the answers are supposed to go. 
        // the loop is just dummy test code. it fails with "Parsing error: Unexpected token ("
        var array = [];
        for (var i = 0; i < 10; i++) {
          array.push(i);
        }
        
        return array;
      })();
    };
    
    var questionObject = new questionAnswerContentObject()
    console.log(questionObject);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 美丽。我注意到您使用“this”。我知道它指的是执行操作的对象,但在我的任何对象声明中都没有使用它,也没有遇到任何错误。这仅仅是最佳实践还是有在对象声明中使用它的目的?
    • @GuybrushThreepwood 必须设置该对象的属性,否则,这些属性将只是局部变量。
    【解决方案3】:

    你可以这样做。

     var questionAnswerContentObject  = {};
    
    questionAnswerContentObject.question.questionTitle = currentQuestion.find("questionTitle").text();
    
    questionAnswerContentObject.answer = [];
    for(var i=0;i<10;i++) {
     var ans = currentQuestion.find(i).text();
    questionAnswerContentObject.answer.push(ans);
    }
    

    【讨论】:

      【解决方案4】:

      我认为您可以直接执行此操作,只要您可以访问原始项目的答案列表。您不能直接在对象文字内使用 for-loop。但您可以使用map 语句。

      所以我想象这样一种场景,您可以通过数组访问答案,类似于您获得标题 (currentQuestion.find("questionTitle").text()) 的方式,也许是 currentQuestion.find("questionAnswers").values()。然后你可以简单地map 覆盖你文字中的结果:

      // This is just a dummy implementation.  Don't know what the real one would look like
      const currentQuestion = {
        questionTitle: 'Why?',
        questionBody: 'What is the meaning of life?',
        questionAnswers: ['Love', '42', 'Mu'],
        find: (prop) => ({text: _ => currentQuestion[prop],
                          values: _=> currentQuestion[prop]})
      }
      
      const questionAnswerContentObject = {
          question: {
            questionTitle: currentQuestion.find("questionTitle").text(),
            questionBody: currentQuestion.find("questionBody").text()
          },
          answers: currentQuestion.find("questionAnswers").values().map(i => ({answer: i}))
      };
      
      console.log(questionAnswerContentObject)

      【讨论】:

        【解决方案5】:

        试试这个脚本。希望对你有帮助。

        var quiz = {
                question1:"what is a function ?",
                question2:"what is polymorphysm ",
                question3:"List two javascript framework",
                question4:"what php is used for?",
                question5:"is Java multy threaded ?",
                quiz1:["to make code better","to arrange your program","a function is a reusable block  of code which you can use  in your program"],
                quiz2 :["to format your code","it is not necessary in programming","in objet oriented programming polymorphysim is the ability of an object to take on many form..."],
                quiz3:["django ,express","symphony ,ruby on rail"," jquery , angular"],
                quiz4:["doing some front programming","a program language to computer operating system ","php is used to built web site and interact with database..."],
                quiz5:["no because it improve complexity","yes , each thread cannot run code concurrently","yes in multy threaded program each can handle different task at the same time"],
                displayQuiz: (question)=>{
        
                    switch(question){
                        case "question1": console.log("Q1 : " + quiz.question1);
                            for (i=0 ; i< quiz.quiz1.length ;i++){  console.log( (i +1) + ") "+ quiz.quiz1[i]);} 
                            break;
                        case "question2":  console.log("Q2 : " + quiz.question2);
                            for (i=0 ; i< quiz.quiz1.length ;i++){  console.log( (i +1) + ") "+ quiz.quiz2[i]);} 
                            break;
                        case "question3": console.log("Q3 : " +quiz.question3);
                            for (i=0 ; i< quiz.quiz1.length ;i++){  console.log( (i +1) + ") "+ quiz.quiz3[i]);} 
                            break;
                        case "question4": console.log("Q4 : " +quiz.question4);
                            for (i=0 ; i< quiz.quiz1.length ;i++){  console.log( (i +1) + ") "+ quiz.quiz4[i]);} 
                            break;
                        case "question5": console.log("Q5 : " +quiz.question5);
                            for (i=0 ; i< quiz.quiz1.length ;i++){  console.log( (i +1) + ") "+ quiz.quiz5[i]);} 
                            break;
                    }
                },
                findAnswer:(question)=>{
        
                    switch(question){
                        case "question1":  console.log( quiz.question1);
                            console.log("a function is a reusable block  of code which you can in your program ");
                            break;
                        case "question2": console.log( quiz.question2); 
                            console.log("in objet oriented programming polymorphysim is the ability of an object to take on many form...");
                            break;
                        case "question3": console.log(quiz.question3);
                            console.log(" jquery, angular...");
                            break;
                        case "question4": console.log(quiz.question4);
                            console.log("php is used to built web site and interact with database...");
                            break;
                        case "question5": console.log(quiz.question5);
                            console.log("yes in multy threaded program each can handle different task at the same time");
                            break;
                    }
                }
            }
        

        要显示问题 1 的测验问题:quiz.displayQuiz("question1")

        找到正确答案:quiz.findAnswer("question1")

        注意:不要忘记通知我潜在的错误。要在控制台上运行

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-02
          • 2012-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多