JS 有一个数组 数组包含无数个对象,每个对象都有ID, 每个对象可能会有 children 每个children 同样也有ID和children 腺癌创建一个JS函数,接收一个ID, 返回该ID对应的节点和它的父级
时间: 2024-11-30 07:28:47 浏览: 3
Three.js基础学习之场景对象
可以创建一个名为`findNodeAndAncestors`的递归函数来解决这个问题。首先,假设我们有一个名为`treeData`的对象数组,其中每个对象都表示一个节点,并且具有`id`, `children`属性。下面是函数的基本实现:
```javascript
function findNodeAndAncestors(treeData, id, currentPath = []) {
for (let node of treeData) {
if (node.id === id) {
return { node, ancestors: currentPath };
}
if (node.children && node.children.some(child => child.id === id)) {
// 如果找到子节点,将其添加到路径并继续搜索其父级
currentPath.push(node);
const foundChild = findNodeAndAncestors(node.children, id, currentPath.slice());
if (foundChild) {
return foundChild;
} else {
// 如果在子节点中未找到,从路径中移除当前节点
currentPath.pop();
}
}
}
// 如果在整个树中都没有找到,返回null
return null;
}
// 使用示例
const exampleTreeData = [
{ id: 'root', children: [{ id: 'child1', children: [{ id: 'targetId' }] }] },
// 更多节点...
];
const targetId = 'targetId'; // 需要查找的 ID
const { node, ancestors } = findNodeAndAncestors(exampleTreeData, targetId);
console.log('Found node:', node);
console.log('Ancestors path:', ancestors);
```
这个函数会返回给定ID的节点及其完整的父级路径。如果找不到对应节点,它将返回`null`。
阅读全文