【发布时间】:2023-03-06 03:24:01
【问题描述】:
我一直在研究这个问题并找到了解决方案。
const TREE_DATA = {
"widgetData":[
{
"label":"node1",
"color":"red",
"children":[
{
"label":"vip1",
"color":"red",
"children":[
{
"label":"obj1",
"color":"gray",
"id":"539803eae4b0ffad82491508"
},
{
"label":"obj2",
"color":"green",
"id":"5395635ee4b071f136e4b691"
},
{
"label":"obj3",
"color":"green",
"id":"539803e4e4b0ffad82491507"
}
],
"id":"53956358e4b071f136e4b690"
},
{
"label":"vip2",
"color":"blue",
"id":"539803f2e4b0ffad82491509"
}
],
"id":"5395634ee4b071f136e4b68e"
},
{
"label":"node2",
"children":[
{
"label":"vip1",
"color":"green",
"id":"539803eae4b0ffad82491501"
},
{
"label":"vip2",
"color":"green",
"id":"5395635ee4b071f136e4b694"
}
],
"id":"5395637fe4b071f136e4b692"
},
{
"label":"node3",
"color":"red",
"children":[
],
"id":"53956371f136e4b692"
},
{
"label":"node4",
"color":"red",
"children":[
],
"id":"5656"
},
{
"label":"node5",
"color":"red",
"children":[
],
"id":"5395637fe4b071f13b692"
}
]
}
const createDOM = (arr) => {
function updateDOM(arr, html, el) {
if (typeof (html) === 'undefined') {
var html = '';
}
if (typeof (el) === 'undefined') {
var el = {li: '<li>', liEnd: '</li>', ul: '<ul>', ulEnd: '</ul>'};
}
if (typeof (arr) === 'string') {
return el.li + arr + el.liEnd;
} else if (typeof (arr) === 'object') {
for (var item in arr) {
if (typeof (arr[item]) === 'string') {
html += el.ul
+ el.li + arr[item] + el.liEnd
+ el.ulEnd;
} else if(typeof (item) === 'string' && (isNaN(item))){
html += el.ul
+ updateDOM(arr[item],'',el)
+ el.ulEnd;
} else if (typeof (arr[item]) === 'object') {
html = updateDOM(arr[item], html,el);
}
}
}
return html;
}
document.getElementById('tree').innerHTML = updateDOM(arr);
}
createDOM(TREE_DATA);
<div id="tree"></div>
但是,我想了解如何使其无状态?如,如果我只想将 TREE_DATA 传递给内部 updateDOM 函数并返回 dom 树,我该怎么做?我希望能够以不必在每个递归函数调用中传递 HTML 的方式编写此函数。如何处理中间 HTML?
例如,下面的斐波那契函数组成:
function factorial(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
【问题讨论】:
标签: javascript html dom recursion