假设您要给一个树形数据中所有没有 children
属性的节点都添加一个空的 children
数组,可以使用递归函数来实现。算法大致步骤如下:
- 定义递归函数
addChildrenToTree(root)
,其中root
表示当前节点。 - 在函数内部,首先判断
root
是否为空,是则直接返回。 - 然后,判断
root
是否已经具有children
属性,有则递归调用addChildrenToTree
函数,传入root
的每个子元素。 - 如果
root
没有children
属性,则向其添加一个空数组[]
。然后递归调用addChildrenToTree
函数,传入root.children
中的每个子元素。 - 递归结束后,返回
root
。
实现代码如下:
function addChildrenToTree(root) {
if (!root) {
return;
}
if (root.children && Array.isArray(root.children)) {
root.children.forEach(child => {
addChildrenToTree(child);
});
} else {
root.children = [];
if (root.children && Array.isArray(root.children)) {
root.children.forEach(child => {
addChildrenToTree(child);
});
}
}
return root;
}
在上述代码中,假设原始的树形数据结构为:
const data = {
name: 'root',
children: [
{
name: 'node1',
children: [
]
},
{
name: 'node2'
}
]
};
然后,调用函数 addChildrenToTree
并传入根节点:
const result = addChildrenToTree(data);
则会针对树形数据中的每个节点都添加一个空的 children
数组,最终结果如下:
{
"name": "root",
"children": [
{
"name": "node1",
"children": []
},
{
"name": "node2",
"children": []
}
]
}
可以看到,原来没有 children
属性的节点 node2
,也被添加了一个空的 children
数组。
如果数据是数组
假设您想要给一个树形数组数据中所有没有 children
属性的元素都添加一个空的 children
数组,可以使用递归函数来实现。算法大致步骤如下:
- 定义递归函数
addChildrenToTree(data)
,其中data
表示当前处理的数组。 - 在函数内部,循环遍历每个元素,判断其是否具有
children
属性。 - 如果有,则递归调用
addChildrenToTree
函数,传入当前元素的children
属性。 - 如果没有
children
属性,则向其添加一个空数组[]
,表示该元素的子元素集合。然后递归调用addChildrenToTree
函数,传入新添加的空数组。 - 递归结束后,返回
data
。
实现代码如下:
function addChildrenToTree(data) {
data.forEach(item => {
if (item.children && Array.isArray(item.children)) {
addChildrenToTree(item.children);
} else {
item.children = [];
addChildrenToTree(item.children);
}
});
return data;
}