2013-10-07 150 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]未定義...

提前致謝。

+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循環中,我們不需要爲每次迭代計算信息對象(Array)的長度,因此執行時間會更短。 – anand4tech

0

謝謝大家的響應,最終的解決方案是jQuery的每個()