javascript - 用纯 Javascript 遍历多维数组
问题描述
我有以下 Json 文件,我正在尝试遍历所有内容,但是嵌套数组中只显示了一项。不知道我在这里做错了什么。
JSON:
{
"items":[
{
"label":"red",
"url":"red",
"items":[
]
},
{
"label":"blue",
"url":"#/blue",
"items":[
{
"label":"green",
"url":"#/green"
},
{
"label":"yellow",
"url":"#/yellow"
},
{
"label":"pink",
"url":"#/pink"
}
]
},......
JS:
var d = document,
main = d.getElementsByTagName('nav')[ 0 ],
ul = d.createElement( 'ul' ),
i;
main.appendChild( ul );
axios.get('../data/colors.json')
.then(function (response) {
console.log(response.data.items);
for( var i in response.data.items ){
var li = d.createElement( 'li' );
if(response.data.items[i].items.length){
li.innerHTML = "<a class='meta'>" + response.data.items[i].label + "<div>" + response.data.items[i].items[i].label + "</div>" + "</a>"; // create a new li element
}
else {
li.innerHTML = "<a class='meta'>" + response.data.items[i].label + "</a>"; // create a new li element
}
ul.appendChild( li );// every time append a new item
}
})
.catch(function (error) {
console.log(error);
});
期望的输出:
<ul>
<li>red<li>
<li>blue
<div>green </div>
<div>yellow </div>
<div>pink</div>
</li>
</ul>
解决方案
您需要迭代/循环嵌套项目,而您没有这样做。基本上为第二级项目添加另一个循环。
这是一个清理后的版本:http: //jsfiddle.net/DennisRas/zyn52p8v/
注意:我已经删除了 .axios 模块以显示什么是重要的。
const data = {
"items":[
{
"label":"red",
"url":"red",
"items":[
]
},
{
"label":"blue",
"url":"#/blue",
"items":[
{
"label":"green",
"url":"#/green"
},
{
"label":"yellow",
"url":"#/yellow"
},
{
"label":"pink",
"url":"#/pink"
}
]
},
{
"label":"blue",
"url":"#/blue",
"items":[
{
"label":"green",
"url":"#/green"
},
{
"label":"yellow",
"url":"#/yellow"
},
{
"label":"pink",
"url":"#/pink"
}
]
},
{
"label":"blue",
"url":"#/blue",
"items":[
{
"label":"green",
"url":"#/green"
},
{
"label":"yellow",
"url":"#/yellow"
},
{
"label":"pink",
"url":"#/pink"
}
]
}
]
};
const nav = document.querySelector('nav');
const ul = document.createElement( 'ul' );
nav.appendChild(ul);
data.items.forEach(function(item) {
const li = document.createElement('li');
let html = "<a class='meta'>" + item.label;
if (item.items && item.items.length) {
item.items.forEach(function(subitem) {
html += "<div>" + subitem.label + "</div>";
});
}
html += "</a>";
li.innerHTML = html;
ul.appendChild(li);// every time append a new item
});
console.log(data.items);
推荐阅读
- python-3.x - 如何在opencv python中为网络摄像头视频提供透明边框?
- hyperledger-fabric - 在 Hyperledger Fabric 中按块号定位账本文件名
- javascript - Angular 如何保存数据
- python - Tkinter 从 PopUp 读取输入值
- c++ - 如何在 QTableview 单元格的值更新后及时为它的颜色设置动画?
- php - Symfony 4 - 设置 Braintree Payments 集成
- go - 为什么在 OpenWRT 上运行 Golang 的 time.Now() 总是得到 UTC 时间?
- django - 为什么我遇到此错误“[remote denied] master -> master (pre-receive hook denied)”?
- r - 如何使用调查数据分布图
- dialogflow-es - 使用 streaming_detect_intent 流式传输音频时获得中间结果