通过子节点查找上级所有父节点 - JavaScript 树形结构处理

作者:rousong2024.02.18 10:16浏览量:12

简介:在JavaScript中处理树形结构时,经常需要找到给定子节点的所有上级父节点。本文将介绍如何通过子节点查找并遍历其所有上级父节点。

在JavaScript中处理树形结构时,我们经常需要找到给定子节点的所有上级父节点。以下是一个通过递归实现的方法,它可以帮助我们遍历并找到给定子节点的所有上级父节点。

首先,我们需要一个树形结构的表示。这里我们使用一个对象数组来表示树,每个对象都有一个id、一个父id以及一个子节点数组。例如:

  1. const tree = [
  2. { id: 1, parentId: null, children: [
  3. { id: 2, parentId: 1, children: [] },
  4. { id: 3, parentId: 1, children: [] }
  5. ] },
  6. { id: 4, parentId: 1, children: [] },
  7. { id: 5, parentId: 2, children: [] }
  8. ];

接下来,我们可以定义一个递归函数来查找给定子节点的所有上级父节点:

  1. function findParentNodes(tree, targetId) {
  2. let result = [];
  3. tree.forEach(node => {
  4. if (node.id === targetId) {
  5. result.push(node);
  6. } else if (node.children) {
  7. const childrenResult = findParentNodes(node.children, targetId);
  8. if (childrenResult.length > 0) {
  9. result.push(...childrenResult);
  10. }
  11. }
  12. });
  13. return result;
  14. }

这个函数会遍历整个树形结构,如果找到目标id的节点,就将其添加到结果数组中。如果当前节点有子节点,则递归调用findParentNodes函数,并将子节点的结果添加到最终结果中。

最后,我们可以使用这个函数来查找给定子节点的所有上级父节点。例如,要查找id为5的节点的所有上级父节点,可以这样做:

```javascript
const targetId = 5;
const parentNodes = findParentNodes(tree, targetId);
console.log(parentNodes); // 输出所有上级父节点对象数组