JS 在树形结构中查找对象、树形结构展平成数组
时间: 2024-03-12 14:48:45 浏览: 36
1. 在树形结构中查找对象
可以使用递归函数来实现在树形结构中查找对象,具体实现步骤如下:
1. 判断当前节点是否为目标节点,如果是则返回该节点。
2. 遍历当前节点的所有子节点,如果子节点存在,则递归调用函数。
3. 如果遍历完所有子节点都没有找到目标节点,则返回 null。
以下是一个示例代码:
```javascript
function findNode(node, targetId) {
if (node.id === targetId) {
return node;
}
if (node.children && node.children.length > 0) {
for (let i = 0; i < node.children.length; i++) {
const result = findNode(node.children[i], targetId);
if (result) {
return result;
}
}
}
return null;
}
// 示例树形结构
const exampleTree = {
id: 1,
name: 'root',
children: [
{
id: 2,
name: 'node2',
children: [
{
id: 4,
name: 'node4'
},
{
id: 5,
name: 'node5'
}
]
},
{
id: 3,
name: 'node3',
children: [
{
id: 6,
name: 'node6'
},
{
id: 7,
name: 'node7'
}
]
}
]
};
// 查找 id 为 5 的节点
const targetNode = findNode(exampleTree, 5);
console.log(targetNode); // 输出 { id: 5, name: 'node5' }
```
可以看到,该函数成功地在树形结构中查找到了目标节点。
2. 树形结构展平成数组
可以使用递归函数来实现将树形结构展平成数组,具体实现步骤如下:
1. 创建一个数组,用于存储所有节点。
2. 遍历当前节点的所有子节点,如果子节点存在,则递归调用函数,并将子节点的返回值添加到数组中。
3. 将当前节点添加到数组中,并返回数组。
以下是一个示例代码:
```javascript
function flattenTree(node) {
const result = [];
if (node.children && node.children.length > 0) {
for (let i = 0; i < node.children.length; i++) {
const children = flattenTree(node.children[i]);
result.push(...children);
}
}
result.push(node);
return result;
}
// 示例树形结构
const exampleTree = {
id: 1,
name: 'root',
children: [
{
id: 2,
name: 'node2',
children: [
{
id: 4,
name: 'node4'
},
{
id: 5,
name: 'node5'
}
]
},
{
id: 3,
name: 'node3',
children: [
{
id: 6,
name: 'node6'
},
{
id: 7,
name: 'node7'
}
]
}
]
};
// 将树形结构展平成数组
const flatArray = flattenTree(exampleTree);
console.log(flatArray);
```
可以看到,该函数成功地将树形结构展平成了数组。
阅读全文