简介:在JavaScript中处理树形结构时,经常需要找到给定子节点的所有上级父节点。本文将介绍如何通过子节点查找并遍历其所有上级父节点。
在JavaScript中处理树形结构时,我们经常需要找到给定子节点的所有上级父节点。以下是一个通过递归实现的方法,它可以帮助我们遍历并找到给定子节点的所有上级父节点。
首先,我们需要一个树形结构的表示。这里我们使用一个对象数组来表示树,每个对象都有一个id、一个父id以及一个子节点数组。例如:
const tree = [{ id: 1, parentId: null, children: [{ id: 2, parentId: 1, children: [] },{ id: 3, parentId: 1, children: [] }] },{ id: 4, parentId: 1, children: [] },{ id: 5, parentId: 2, children: [] }];
接下来,我们可以定义一个递归函数来查找给定子节点的所有上级父节点:
function findParentNodes(tree, targetId) {let result = [];tree.forEach(node => {if (node.id === targetId) {result.push(node);} else if (node.children) {const childrenResult = findParentNodes(node.children, targetId);if (childrenResult.length > 0) {result.push(...childrenResult);}}});return result;}
这个函数会遍历整个树形结构,如果找到目标id的节点,就将其添加到结果数组中。如果当前节点有子节点,则递归调用findParentNodes函数,并将子节点的结果添加到最终结果中。
最后,我们可以使用这个函数来查找给定子节点的所有上级父节点。例如,要查找id为5的节点的所有上级父节点,可以这样做:
```javascript
const targetId = 5;
const parentNodes = findParentNodes(tree, targetId);
console.log(parentNodes); // 输出所有上级父节点对象数组