简体   繁体   English

使用jQuery改善JSON解码

[英]Improving json decoding with jquery

Can I improve that somehow? 我可以以某种方式改善它吗? i want to make it easier, maybe in loop couse in future i want to display more questions than only 10. I tried to use variable with string instead of ,,idX" but it wasnt work. I dont want use too much if statements 我想让它更容易,也许将来会引起循环中的问题,我想显示的问题不只是10个。我试图使用带字符串的变量而不是“ ,, idX”,但是它没有用。我不想过多地使用if语句

this is my json: {"numberOfQuestions":2,"id1":{"id":"2"},"id2":{"id":"1"}} 这是我的json:{“ numberOfQuestions”:2,“ id1”:{“ id”:“ 2”},“ id2”:{“ id”:“ 1”}}

 $.getJSON(apiUrl+'/api-V1/generateQuestions.php?category=math', function(data) {
                    numberOfQuestions =  data.numberOfQuestions;
                    questionIDs = new Array();
                    if(numberOfQuestions>=1){
                        questionIDs.push(data.id1.id);
                    }
                    if(numberOfQuestions>=2){
                        questionIDs.push(data.id2.id); 
                    }
                    if(numberOfQuestions>=3){
                        questionIDs.push(data.id3.id);  
                    }
                    if(numberOfQuestions>=4){
                        questionIDs.push(data.id4.id);  
                    }
                    if(numberOfQuestions>=5){
                        questionIDs.push(data.id5.id);  
                    }
                    if(numberOfQuestions>=6){
                        questionIDs.push(data.id6.id);  
                    }
                    if(numberOfQuestions>=7){
                        questionIDs.push(data.id7.id); 
                    }
                    if(numberOfQuestions>=8){
                        questionIDs.push(data.id8.id); 
                    }
                    if(numberOfQuestions>=9){
                        questionIDs.push(data.id9.id);  
                    }
                    if(numberOfQuestions>=10){
                        questionIDs.push(data.id10.id); 
                    }
                    loadQuestion(questionIDs[currentQuestion-1]);



                }); 

You might use a for loop and access the property using id and concatename the value of i : 您可以使用for循环并使用id和concatename i的值来访问属性:

for (let i = 1; i <= data.numberOfQuestions; i++) {
    questionIDs.push(data['id' + i].id);
}

 let questionIDs = []; let data = { "numberOfQuestions": 2, "id1": { "id": "2" }, "id2": { "id": "1" } } for (let i = 1; i <= data.numberOfQuestions; i++) { questionIDs.push(data['id' + i].id); } console.log(questionIDs); 

while循环在这里非常简洁。

while(numberOfQuestions--) questionIDs.push(data['id' + (numberOfQuestions+1)].id);

You can access values of an object using it's key in two ways: 您可以通过两种方式使用键来访问对象的值:

  1. the one you're using object.key in your example data.id8.id 您在示例data.id8.id使用object.keydata.id8.id
  2. the array-like way using objec['key'] so data['ind8'].id 使用objec['key']的类似数组的方式,所以data['ind8'].id

In the second way you use a string to access your value. 在第二种方式中,您使用字符串来访问您的值。 So you could do sth. 所以你可以做某事。 like: 喜欢:

numberOfQuestions =  data.numberOfQuestions;
questionIDs = []
questionIDs.push(data['id' + somenumber].id)

With this knowledge you can optimize the code. 有了这些知识,您就可以优化代码。

for(let i = 1; numberOfQuestions >= i; i++){
    questionIDs.push(data['id' + i)].id);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM