Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中DOM的递归_Javascript - Fatal编程技术网

JavaScript中DOM的递归

JavaScript中DOM的递归,javascript,Javascript,我正在学习JavaScript,并试图解决在上一次会议上提出的一个问题 问题是从给定的嵌套对象创建一个嵌套的ul/li 以下是我的代码: let data = { "Fish": { "trout": {}, "salmon": {} }, "Tree": { "Huge": { "sequoia": {}, "oak": {} }, "Flowering": { "redbud": {},

我正在学习JavaScript,并试图解决在上一次会议上提出的一个问题

问题是从给定的嵌套对象创建一个嵌套的ul/li

以下是我的代码:

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更快、质量更高,所以您需要给我投票。。正确的????