遍历嵌套的Json数组

3
新手学习json和js,希望有人能教我一些。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> 

这是我目前找到的唯一适用的解决方案,但我不需要一个双重列表(时间和文本字符串出现两次)。写任何函数代替第二个循环都会导致错误信息“info[i]未定义”...

提前感谢。

你想知道什么? 你能否发布出现错误的代码? - Vandesh
3个回答

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('');

避免字符串的拼接(它会占用更多的内存),在for循环中我们不需要为每次迭代计算info对象(数组)的长度,因此执行时间会更短。 - Anand Jha

0

感谢大家的回应,最终解决方案是使用jQuery的each()方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接