2016-11-14 4 views
2

Я пытаюсь разобрать следующие данные:Доступ к данным в структуре JS

data = [  
    {"id":"orderBy", "options" : [ 
     {"value":"order-by=newest&", "name":"newest"}, 
     {"value":"order-by=relevance&", "name":"relevance"} 
    ]}, 
    {"id":"searchBy", "options" : [ 
     {"value":"search-by=name&", "name":"name"}, 
     {"value":"search-by=number&", "name":"number"}, 
     {"value":"search-by=date&", "name":"date"}, 
     {"value":"search-by=location&", "name":"location"} 
    ]} 
]; 

Используя эти данные, я хочу, чтобы перебирать каждого объекта и возвращает его идентификатор, а затем все это варианты.

Я знаю, что нужно использовать цикл как это:

for (var i =0; i < data.length; i++) { 

    var id = data[i].id; 
    var optionText = data[i].options[i].text; 
    var optionValue = data[i].options[i].value; 

    console.log(id); 
    console.log(optionText); 
    console.log(optionValue); 
}: 

Этот цикл возвращает только первый OptionText & OptionValue из данных. Можете ли вы научить меня, что я делаю неправильно?

Спасибо.

+2

Вы на правильном пути, вам просто нужно сделать еще один foreach для опций , прямо сейчас вы используете тот же 'i' из исходного цикла. –

+4

Пара вещей: у вас нет JSON. JSON - это строковый формат, который необходимо проанализировать до его использования. У вас есть массив объектов. Вы также не разбираете его. Анализ (обычно) принимает что-то из строкового формата и помещает его в формат, используемый вашей программой. Что касается того, как получить нужные данные, вы, похоже, понимаете, как использовать циклы 'for' для прохождения первого уровня. Не могли бы вы использовать другой цикл 'for' для получения внутренних элементов? –

+0

У вас нет текста с текстом внутри, но есть имя в объекте. –

ответ

1

data = [  
 
    {"id":"orderBy", "options" : [ 
 
     {"value":"order-by=newest&", "name":"newest"}, 
 
     {"value":"order-by=relevance&", "name":"relevance"} 
 
    ]}, 
 
    {"id":"searchBy", "options" : [ 
 
     {"value":"search-by=name&", "name":"name"}, 
 
     {"value":"search-by=number&", "name":"number"}, 
 
     {"value":"search-by=date&", "name":"date"}, 
 
     {"value":"search-by=location&", "name":"location"} 
 
    ]} 
 
]; 
 
    
 
for (var i in data) { 
 
    var id = data[i].id; 
 
    console.log(id) 
 
    for (var opt of data[i].options){ 
 
    console.log(opt.value); 
 
    console.log(opt.name) 
 
    } 
 

 
}

Вы недоставало петлю Интерактивного. Также я считаю, что это может быть идеальным примером для вас увидеть разницу (и существование?) Итерации через объекты и массивы с помощью in и of

4

Вы можете использовать другой цикл for для внутреннего массива.

var data = [{ "id": "orderBy", "options": [{ "value": "order-by=newest&", "name": "newest" }, { "value": "order-by=relevance&", "name": "relevance" }] }, { "id": "searchBy", "options": [{ "value": "search-by=name&", "name": "name" }, { "value": "search-by=number&", "name": "number" }, { "value": "search-by=date&", "name": "date" }, { "value": "search-by=location&", "name": "location" }] }], 
 
    i, j, id, optionText, optionValue; 
 

 
for (i = 0; i < data.length; i++) { 
 
    id = data[i].id; 
 
    for (j = 0; j < data[i].options.length; j++) { 
 
     optionText = data[i].options[j].name; 
 
     optionValue = data[i].options[j].value; 
 
     console.log(id, optionText, optionValue); 
 
    } 
 
}

1

Вы два уровня массива вы должны цикла через. Первый цикл через внешний массив, а затем через параметры каждого пункта:

var data = [{"id":"orderBy","options":[{"value":"order-by=newest&","name":"newest"},{"value":"order-by=relevance&","name":"relevance"}]},{"id":"searchBy","options":[{"value":"search-by=name&","name":"name"},{"value":"search-by=number&","name":"number"},{"value":"search-by=date&","name":"date"},{"value":"search-by=location&","name":"location"}]}]; 
 

 
for (var i = 0; i < data.length; i++) { 
 
    var id = data[i].id; 
 
    console.log(id); 
 
    
 
    for(var j = 0; j < data[i].options.length; j++) { 
 
    var optionText = data[i].options[j].name; 
 
    var optionValue = data[i].options[j].value; 
 
    console.log(optionText); 
 
    console.log(optionValue); 
 
    } 
 
}

Смежные вопросы