2013-10-07 6 views
3

Новое в json и js, так что я бы appriciate, если кто-то научит меня немного. Json массив:Итерация над вложенным массивом Json

var info = [ 
{"t":"09:00","b":"Vaba"}, 
{"t":"09:30","b":"Vaba"} ] ; 

И JS часть:

var output='';  
for (var i = 0; i <= info.length; i++) { 
    for (info.t of info[i]) { 
     output += '<option> ' + info[i].t + ' ' + info[i].b + '</option>'; } }; 

    var update = document.getElementById('start_time'); 
    update.innerHTML = output; 

В результате я получаю в HTML выглядит следующим образом:

<option>9.00 Vaba</option> 
<option>9.00 Vaba</option> 
<option>9.30 Vaba</option> 
<option>9.30 Vaba</option> 

Это единственное рабочее решение, которое я нашел так далеко, но мне не нужен двойной список (строка времени и текста дважды). Написание любой функции вместо второго конца цикла с информацией об ошибке [i] undefined ...

Спасибо заранее.

+0

Что вы хотите знать? Можете ли вы опубликовать код, который вызывает ошибку для вас? – Vandesh

ответ

1

Просто удалите дополнительную петлю for. Также будьте осторожны с ссылкой на индекс вне диапазона в info. Когда i = info.length, info[i] выходит за пределы. Просто убедитесь, что он никогда не заходит так далеко:

var output='';  
for (var i = 0; i < info.length; i++) { 
    output += '<option> ' + info[i].t + ' ' + info[i].b + '</option>'; 
} 

var update = document.getElementById('start_time'); 
update.innerHTML = output; 
0

Попробуйте это, потребуется меньше времени на выполнение, а также позаботится о памяти.

var optionList=[]; 
var len= info.length; 
for (var i = 0; i < len; i++) { 
    optionList.push('<option> ' + info[i].t + ' ' + info[i].b + '</option>'); 
} 

var update = document.getElementById('start_time'); 
update.innerHTML = optionList.join(''); 
+0

Избегайте конкатенации строки (требуется больше памяти), а в цикле for нам не нужно вычислять длину информационного объекта (массива) для каждой итерации, поэтому время выполнения будет меньше. – anand4tech

0

Спасибо всем за ответ, окончательное решение было JQuery каждый()

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