2013-10-07 118 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的每个()