问题描述
我必须使用树数组创建树结构,但无法正确遍历数组。 我使用以下代码:
function fnAppend(param) {
var tree= [ {
"name": "A","children": [
{
"name": "A1","children": [
{
"name": "A2","children": []
},
{
"name": "A3","children": []
}
]
},
{
"name": "B1","children": [
{
"name": "B2","children": []
}
]
}
]
},
{
"name": "B","children": []
},
{
"name": "C","children": [
{
"name": "C1","children": [
{
"name": "C2","children": []
}
]
}
]
}
];
for(var i = 0; i < tree.length; i++){
console.log("Mother : "+tree[i].name);
var childArray = tree[i].children;
for(var j = 0; j < childArray.length; j++){
console.log("Child :"+childArray[j].name);
}
}
}
1楼
一个简单的递归方法将起作用。
function children(list){
for(var i = 0; i < list.length; i++){
var name = list[i].name;
console.log(name);
if(list[i].children != undefined){
children(list[i].children);
}
}
}
它的作用是:循环传递数组的级别,然后检查是否有任何对象具有子对象(如果有的话),它会自行调用并再次进行操作,直到找不到子对象为止,然后继续下一个对象。
这是完整的 。
2楼
这是您需要递归函数的地方。
function traverse(arr) {
for (const branch of arr) {
console.log('Mother:', branch.name);
if (Array.isArray(branch.children) && branch.children.length > 0) {
console.log('Children:', branch.children.map(i => i.name).join(', '));
traverse(branch.children);
}
}
}
traverse(tree);
3楼
您可以递归并移交父名称。
const iter = parent => ({ name, children }) => { console.log('parent', parent, 'name', name); if (children.length) children.forEach(iter(name)); }; var tree = [{ name: "A", children: [{ name: "A1", children: [{ name: "A2", children: [] }, { name: "A3", children: [] }] }, { name: "B1", children: [{ name: "B2", children: [] }] }] }, { name: "B", children: [] }, { name: "C", children: [{ name: "C1", children: [{ name: "C2", children: [] }] }] }]; tree.forEach(iter());
.as-console-wrapper { max-height: 100% !important; top: 0; }