【发布时间】:2021-09-27 17:53:48
【问题描述】:
所以有以下格式的对象数组
let inputs = [
{
"id": "614344d9d9c21c0001e6af2e",
"groupName": "Unassigned",
"parentGroup": "null"
},
{
"id": "614447da152f69c3c1d52f2e",
"groupName": "P1",
"parentGroup": "null"
},
{
"id": "614447da152f69c3c1d52f38",
"groupName": "K1",
"parentGroup": "C1"
},
{
"id": "614447da152f69c3c1d52f3e",
"groupName": "A2",
"parentGroup": "C2"
},
{
"id": "614447da152f69c3c1d52f40",
"groupName": "G1",
"parentGroup": "P2"
},
{
"id": "614447da152f69c3c1d52f46",
"groupName": "F1",
"parentGroup": "null"
},
{
"id": "614447da152f69c3c1d52f30",
"groupName": "P2",
"parentGroup": "null"
},
{
"id": "614447da152f69c3c1d52f36",
"groupName": "C2",
"parentGroup": "P1"
},
{
"id": "614447da152f69c3c1d52f3c",
"groupName": "A1",
"parentGroup": "C2"
},
{
"id": "614447da152f69c3c1d52f34",
"groupName": "C1",
"parentGroup": "P1"
},
{
"id": "614447da152f69c3c1d52f32",
"groupName": "P3",
"parentGroup": "null"
},
{
"id": "614447da152f69c3c1d52f3a",
"groupName": "K2",
"parentGroup": "C1"
},
{
"id": "614447da152f69c3c1d52f42",
"groupName": "GG1",
"parentGroup": "G1"
},
{
"id": "614447da152f69c3c1d52f44",
"groupName": "GGG1",
"parentGroup": "GG1"
}
]
我正在尝试创建格式的树结构
{name:'p1',children:[{name:'c1':children:[]}]}
所以我对给定数组的所有元素进行了排序,考虑到 parentGroup 为“null”的元素位于数组的顶部。
let finalArr = [];
inputs.sort((a,b)=> (a.parentGroup === "null") ? -1 : 1);
对于输入数组的每个元素,我在逻辑下进行迭代
inputs.forEach(ele => {
if(ele.parentGroup === "null"){
let child= {name:ele.groupName,children:[]};
finalArr.push(child);
}else{
finalArr.forEach(item => {
this.findNode(item,ele);
})
}
});
如果元素的'parentGroup'为“null”,则创建一个叶子类型的obj并将元素推送到'finalArr'数组
否则,然后通过递归函数遍历 'finalArr' 的所有元素
public findNode(ele, obj){
if(ele.children.length === 0){
if(ele.name === obj.parentGroup){
let child = {name:obj.groupName, children:[]};
ele.children.push(child);
}
}else{
let j = ele.children.length-1;
this.findNode(ele.children[j--],obj);
}
}
此递归函数将检查元素是否有子元素,如果没有子元素,则将给定 obj 的 parentGroup 与“FinalArr”中的元素名称进行比较。 如果是,则将当前 obj 推送给 finalArr 元素的子元素。
else,即当children有更多元素时,会触发相同的递归,直到达到元素的深度。
有了这个,我想我会用给定的输入数组创建一个树结构,但是当父母有更多相同级别的孩子时,这个逻辑会失败, 所以输入数组有'c1',它是'p1'的孩子,但只有孩子'c2'驻留,不确定我错过了什么。
【问题讨论】:
-
请仅解决此问题中的一个问题。您在获取树数据结构或在 html 中呈现树时遇到问题吗?
-
获取树状数据结构
标签: javascript arrays tree