使用jQuery改善JSON解码

时间:2018-11-28 18:52:21

标签: javascript jquery json api

我可以以某种方式改善它吗? 我想使其变得更容易,也许将来会引起循环中的问题,我想显示的问题不仅仅是10个。我试图使用带字符串的变量代替“ ,, idX”,但是它没有用。 我不想使用过多的if语句

这是我的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]);



                }); 

3 个答案:

答案 0 :(得分:2)

您可以使用for循环并使用id访问属性,并将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);

答案 1 :(得分:1)

while循环在这里非常简洁。

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

答案 2 :(得分:-1)

您可以通过两种方式使用其键访问对象的值:

  1. 示例object.key中您使用的data.id8.id
  2. 使用objec['key']的类似数组的方式,所以data['ind8'].id

第二种方法是使用字符串访问值。所以你可以做某事。喜欢:

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

有了这些知识,您就可以优化代码。

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