js获取数组树结构中某个节点及其所有的父节点,并以树结构形式返回
时间: 2023-12-06 17:39:43 浏览: 140
可以使用递归实现这个功能。假设我们有一个数组树结构,每个节点包含 `id` 和 `parentId` 两个属性,表示当前节点的 ID 和其父节点的 ID。
下面是一个示例代码:
```javascript
function getNodeAndParents(tree, nodeId) {
let node = null;
const parents = [];
function findNodeAndParents(currentNode) {
if (currentNode.id === nodeId) {
node = currentNode;
return true;
}
if (currentNode.children) {
for (let i = 0; i < currentNode.children.length; i++) {
if (findNodeAndParents(currentNode.children[i])) {
parents.push(currentNode);
return true;
}
}
}
return false;
}
for (let i = 0; i < tree.length; i++) {
if (findNodeAndParents(tree[i])) {
break;
}
}
return {
node,
parents: parents.reverse()
};
}
```
这个函数接受两个参数:数组树结构和要查找的节点的 ID。它会返回一个包含两个属性的对象:`node` 表示找到的节点,`parents` 表示这个节点的所有父节点,按照从根节点到当前节点的顺序排列。
我们可以将这个函数用于任何符合我们定义的数组树结构。例如,假设我们有以下的数组树结构:
```javascript
const tree = [
{
id: 1,
parentId: null,
children: [
{
id: 2,
parentId: 1,
children: [
{
id: 4,
parentId: 2
},
{
id: 5,
parentId: 2
}
]
},
{
id: 3,
parentId: 1,
children: [
{
id: 6,
parentId: 3
},
{
id: 7,
parentId: 3
}
]
}
]
}
];
```
我们可以使用以下的代码来获取 ID 为 5 的节点及其所有父节点:
```javascript
const result = getNodeAndParents(tree, 5);
console.log(result.node); // 输出 { id: 5, parentId: 2 }
console.log(result.parents); // 输出 [ { id: 2, parentId: 1 }, { id: 1, parentId: null } ]
```
注意到 `parents` 数组是按照从根节点到当前节点的顺序排列的,因此我们需要使用 `reverse()` 方法来反转它的顺序。
阅读全文