2017-01-25 6 views
0

現在、MVC JSフレームワークで作業しています。ループ上でランダムなエントリを取ることができるオブジェクトのリストを取得したいと考えています。これまでは、ランダムなIDを見つけ出し、そのオブジェクトを引き出してその部分が問題にならないようにする関数を作成しました。これは、オブジェクトの配列の中に何が起こっているのです。JavaScriptで配列にオブジェクトを配置する

QuestionsSetup: function(gameType) { 

     // Setup Resources 
     var c = this.View.children; 
     var player1qs = []; 
     var leftQ = 0; 
     var rightQ = 0; 
     var maxQValue = 50; 
     var minQValue = 1; 

     // Fill array with questions 
     for (var i = 0; i < 5; i++) { 

      // Build a random question with numbers between 1 and 50 

      // Build Question Text to output to user 

      // Generate correct answers based on generated question 

      // Generate unsorted, incorrect answers and add them to an array 

      //Place Questions into object 
      questions.qId = i; 
      questions.leftQ = leftQ; 
      questions.rightQ = rightQ; 
      questions.correctAnswer = correctAnswer; 
      questions.allAnswers = sortedAnswers; 
      questions.questionText = questionText; 

      //Add to array of questions 
      player1qs.push(questions); 
     } 
    } 

これは、配列に追加しますが、新しいオブジェクトを追加するとき、それらはすべて同じなしに出てくるので、それはまた、アレイ内の既存のオブジェクトの値を変更します私が後で引っ張るもの。質問オブジェクトはmodelsフォルダ内のそれ自身のファイルで宣言されています。各ループの開始時に、既存のものを参照するのではなく、新しい空の質問オブジェクトをアプリケーションに伝える方法はありますか?私はあなたが同様のバックエンドの言語習慣の中でできることを知っているので、JavaScriptにはあまりにも単純なことが存在しないことを信じたくないのですか?

+3

あまりにも多くのコードは、最小限の例に来てみてくださいありますしてください – Axnyff

+1

にそれを簡素化関連部分 –

+0

これは参照渡しなので、元のデータを更新すると元の参照データが更新されます。毎回新しい質問オブジェクトを使用する必要がありますか? –

答えて

1

各項目の変数を宣言することは間違いありません。

QuestionsSetup: function(gameType) { 

    // Setup Resources 
    var c = this.View.children; 
    var player1qs = []; 
    var leftQ = 0; 
    var rightQ = 0; 
    var maxQValue = 50; 
    var minQValue = 1; 

    // Fill array with questions 
    for (var i = 0; i < 5; i++) { 

     var tempQuestion = { 
      qId: i, 
      leftQ: leftQ, 
      rightQ: rightQ, 
      correctAnswer: correctAnswer, 
      allAnswers: sortedAnswers, 
      questionText: questionText 
     } 


     // ... 


     //Add to array of questions 
     player1qs.push(tempQuestion); 
    } 
} 

ループ内に別のクロージャを使用することも良い考えです。

0

は、次の操作を行います。

for (var i = 0; i < 5; i++) { 
    let questions = {}; 
    // the rest.... 

は、あなたが最初のオブジェクトを定義する必要があります。

0

たぶん、あなただけの質問は、そのプロパティを初期化する前にオブジェクトを初期化する必要があり、そのコードは次のようになります。

 //Place Questions into object 
     questions = {}; 

     questions.qId = i; 
     questions.leftQ = leftQ; 
     questions.rightQ = rightQ; 
     questions.correctAnswer = correctAnswer; 
     questions.allAnswers = sortedAnswers; 
     questions.questionText = questionText; 

     //Add to array of questions 
     player1qs.push(questions); 
関連する問題