JavaScript中DOM的递归
我正在学习JavaScript,并试图解决在上一次会议上提出的一个问题 问题是从给定的嵌套对象创建一个嵌套的ul/li 以下是我的代码:JavaScript中DOM的递归,javascript,Javascript,我正在学习JavaScript,并试图解决在上一次会议上提出的一个问题 问题是从给定的嵌套对象创建一个嵌套的ul/li 以下是我的代码: let data = { "Fish": { "trout": {}, "salmon": {} }, "Tree": { "Huge": { "sequoia": {}, "oak": {} }, "Flowering": { "redbud": {},
let data =
{
"Fish": {
"trout": {},
"salmon": {}
},
"Tree": {
"Huge": {
"sequoia": {},
"oak": {}
},
"Flowering": {
"redbud": {},
"magnolia": {}
}
}
};
function createTree(data,key=null,parent_element=document.body){
if(Object.keys(data).length){
if(key){
li = document.createElement('li');
li.textContent = key;
li = parent_element.append(li);
}
ul = document.createElement('ul');
parent_element.append(ul);
for(let key in data){
createTree(data[key],key,ul);
}
return
}
li = document.createElement('li');
li.textContent = key;
parent_element.append(li);
return;
}
createTree(data);
这将产生以下输出
而预期的输出如下
我的代码有什么问题?我没有发现我的逻辑有任何错误 你的逻辑没有问题。问题是,您忘了在
createTree
函数中的ul
变量之前添加var
声明。在代码生效之前添加var
。(您应该始终使用var
、let
或const
声明变量,否则事情会变得很奇怪。)
let数据={
“鱼”:{
“鳟鱼”:{},
“鲑鱼”:{}
},
“树”:{
“巨大”:{
“红杉”:{},
“橡树”:{}
},
“开花”:{
“紫荆花”:{},
“木兰”:{}
}
}
};
函数createTree(数据,key=null,父元素=document.body){
李华;
if(Object.keys(data.length){
如果(关键){
li=document.createElement('li');
li.textContent=key;
li=父元素。追加(li);
}
var ul=document.createElement('ul');
父元素附加(ul);
for(让我们输入数据){
createTree(数据[key],key,ul);
}
返回;
}
li=document.createElement('li');
li.textContent=key;
父元素。追加(li);
返回;
}
createTree(数据)代码>
let数据={
“鱼”:{
“鳟鱼”:{},
“鲑鱼”:{}
},
“树”:{
“巨大”:{
“红杉”:{},
“橡树”:{}
},
“开花”:{
“紫荆花”:{},
“木兰”:{}
}
}
};
函数createTree(数据,key=null,父元素=document.body){
if(Object.keys(data.length){
设ul=document.createElement('ul');
如果(关键){
li=document.createElement('li');
li.textContent=key;
li=父元素。追加(li);
}
ul=document.createElement('ul');
父元素附加(ul);
for(让我们输入数据){
createTree(数据[key],key,ul);
}
返回
}
li=document.createElement('li');
li.textContent=key;
父元素。追加(li);
返回;
}
createTree(数据)代码>我只花了最后7个小时试图找出哪里出了问题。非常感谢你。“你知道当变量没有用let声明时发生了什么吗?”jibinmathew对我的答案做了解释。请看我的编辑。你的答案是正确的,我没有否决你的答案。我对你的答案投了赞成票。谢谢您的时间。@jibinmathew我给出的解决方案比Jake miller更快、质量更高,所以您需要给我投票。。正确的????