2014-11-20 72 views
1

我想縮短我的代碼,並且卡住了。我有一個測驗,併爲每個問題的答案加載。但我想有一個變量可以爲我做到這一點。使用變量作爲JSON密鑰

下面是代碼:

if (nr === 1) { 
    $('#questionmobile').html(content.inst3.question1); 
    $('#answer1').html(content.inst3.q1a1); 
    $('#answer2').html(content.inst3.q1a2); 
    $('#answer3').html(content.inst3.q1a3); 
    $('#answer4').html(content.inst3.q1a4); 
} else if (nr === 2) { 
    $('#questionmobile').html(content.inst3.question2); 
    $('#answer1').html(content.inst3.q2a1); 
    $('#answer2').html(content.inst3.q2a2); 
    $('#answer3').html(content.inst3.q2a3); 
    $('#answer4').html(content.inst3.q2a4); 
}...... 

正如你可以看到它非常多餘的,所以我認爲包括變量「NR」有問題的數量的信息。所以,我想是這樣的:

$('#questionmobile').html(content.inst3.question+nr); 
$('#answer1').html(content.inst3.q+nr+a1); 

級聯+nr+不工作,因爲它不直接到正確的JSON內容。

回答

4

如果要將變量用作關鍵字,則可以使用括號表示(如數組,[])。

$('#questionmobile').html(content.inst3['question'+nr]); 
$('#answer1').html(content.inst3['q'+nr+'a1']); 

你甚至可以使用一個循環的答案:

$('#questionmobile').html(content.inst3['question'+nr]); 

var i, numAnswers = 4; 
for(i = 1; i <= numAnswers; i++) { 
    $('#answer' + i).html(content.inst3['q'+nr+'a'+i]); 
} 
1

首先,當你說content.inst3.q+nr+a1 JavaScript的解釋,作爲(content.inst3.q)+(nr)+(a1),因此它被添加變量一起不存在的。

您問到的問題的答案是您可以使用括號通過字符串名稱訪問對象中的字段。例如:

var x = {name: "Joe", age:56}; 
alert(x["name"]); //Outputs Joe 
alert(x["age"]); //Outputs 56 

您可以使用此相同的技術來撰寫符合您的模式的字符串。但是,這可能不是最好的方法。你可能應該重組你的輸入數據,這樣你就不需要使用這種技術。例如,你可以有你的數據看起來是這樣的:

{ 
    "questions": [ 
     { 
      "prompt": "Who was the first president of the US?", 
      "answers": ["George Washington", "Abraham Lincoln", "Captain America", "The Hulk"] 
     } 
    ] 
} 

這將組織你的數據轉換成數組,這似乎更好地爲這個數據符合您的使用案例。

0

謝謝你們,這兩個答案都有幫助。我的解決方案是你的答案的混合。

$('#questionmobile').html(content.inst3.questions[nr - 1].question); 
var i, numAnswers = 3; 
for (i = 0; i <= numAnswers; i++) { 
$('#answer' + (i + 1)).html(content.inst3.questions[nr - 1].answers[i]); 
} 

而且我打掃我的JSON結構:

"questions":[ 
{ 
     "question":"bla?", 
     "answers":["Toto Arno",'Anders Thomas','Tadao Ando','Tadaaa Anden'] 
}, 
{ 
     "question":'bli?', 
     "answers":["Wasser",'Papier','Stein','Schere'] 
}, 
{ 
     "question":'blu?', 
     "answers":["Deutschland",'Niederlande','Bosnien und Herzegowina','S&uuml;dkorea'] 
} 
      ]