js递归查找树形结构中某一个节点的兄弟节点

该文章介绍了如何使用JavaScript编写一个名为`findSiblingsById`的函数,通过递归遍历树形数据结构,查找具有特定id值的节点的兄弟节点。函数接受树形数据、目标键和子节点键作为参数。
摘要由CSDN通过智能技术生成
function findSiblingsById(tree, targetVal,config) {
  const targetKey=config.targetKey
  const children=config.children
  // 递归遍历树形数据结构
  function traverse(nodes) {
    for (let node of nodes) {
      if (node[targetKey] === targetVal) {
        // 找到目标节点,返回其父节点的所有子节点
        return nodes.filter((sibling) => sibling[targetKey] !== targetVal);
      }
      if (node[children]) {
        // 继续遍历子节点
        const result = traverse(node[children]);
        if (result) {
          return result;
        }
      }
    }
  }

  // 调用递归函数,从根节点开始搜索
  return traverse(tree);
}

// 输入数据
const tree = [
  {
    id: 1,
    name: 'Node 1',
    code: '001',
    children: [
      {
        id: 2,
        name: 'Node 2',
        code: '002',
        children: []
      },
      {
        id: 3,
        name: 'Node 3',
        code: '003',
        children: []
      },
      {
        id: 6,
        name: 'Node 6',
        code: '006',
        children: []
      }
    ]
  },
  {
    id: 4,
    name: 'Node 4',
    code: '004',
    children: [
      {
        id: 5,
        name: 'Node 5',
        code: '005',
        children: []
      }
    ]
  }
];

// 查找id为2的兄弟节点
const siblings = findSiblingsById(tree, 2,{targetKey:'id',children:'children'});
console.log(siblings,'兄弟节点');

// 输出
const siblings = [
    {
        "id": 3,
        "name": "Node 3",
        "code": "003",
        "children": []
    },
    {
        "id": 6,
        "name": "Node 6",
        "code": "006",
        "children": []
    }
]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个示例的 JavaScript 代码,实现递归查找树形结构一个节点的功能。 ```javascript function findNode(node, targetId) { if (node.id === targetId) { return node; } if (node.children) { for (let i = 0; i < node.children.length; i++) { let found = findNode(node.children[i], targetId); if (found) { return found; } } } return null; } ``` 这段代码,`findNode` 是一个递归函数,它接受两个参数:当前节点和目标节点的 ID。在函数,如果当前节点的 ID 与目标节点的 ID 相同,则返回当前节点。否则,如果当前节点有子节点,则对于每一个节点都调用 `findNode` 函数,并检查它的返回值。如果找到了目标节点,则返回该节点;否则返回 null。 这个示例假设你的树形结构一个对象, 这个对象有一个ID和children属性, 也可以根据具体需要修改成其他的. ### 回答2: 下面是一个使用递归查找树形结构下某一个节点JavaScript 函数: ```javascript function findNode(tree, targetId) { // 遍历树的函数 function traverseNode(node) { // 如果当前节点的id等于目标id,则返回当前节点 if (node.id === targetId) { return node; } // 遍历当前节点的子节点 for (let i = 0; i < node.children.length; i++) { // 递归调用遍历函数,查找节点 const foundNode = traverseNode(node.children[i]); // 如果找到了目标节点,则返回该节点 if (foundNode !== null) { return foundNode; } } // 如果没有找到目标节点,则返回null return null; } // 调用递归函数,从根节点开始查找 return traverseNode(tree); } ``` 这个函数接收两个参数,`tree` 表示树形结构的根节点,`targetId` 表示目标节点的id。首先定义了一个内部递归函数 `traverseNode`,用来遍历节点查找目标节点。在遍历函数,首先检查当前节点的id是否等于目标id,如果是则返回当前节点。然后遍历当前节点的子节点,对每个子节点递归调用遍历函数,查找节点是否存在目标节点。如果找到,则返回该节点。如果遍历完所有子节点都没有找到目标节点,则返回null。最后,在外部调用,调用遍历函数,从根节点开始查找。如果找到目标节点,则返回该节点,否则返回null。 ### 回答3: JavaScript递归查找树形结构下的某一节点可以通过以下步骤实现: 1. 首先,定义一个递归函数,接收两个参数:要查询的节点id和一个树形结构的数据。假设我们的树形结构数据是一个对象数组,每个对象都有一个唯一的id和一个children属性,存储了该节点的子节点。 2. 在递归函数,首先遍历树形结构数据数组。可以使用for循环或者Array.prototype.forEach()方法来实现。 3. 对于每一个数据对象,首先判断当前节点的id是否等于要查询的节点id。如果等于,则找到了目标节点,可以返回该节点。 4. 如果当前节点的id不等于要查询的节点id,则继续递归调用该函数,在当前节点的子节点(children)数组上进行遍历,传入要查询的节点id和子节点数组作为参数。 5. 对于每一个节点对象,再次执行步骤3和步骤4,直到遍历完整个树形结构,或者找到目标节点为止。 6. 如果在整个树形结构找到目标节点,则返回null或者其他指定的未找到标识。 示例代码如下: ```javascript function findNode(id, data) { for (var i = 0; i < data.length; i++) { if (data[i].id === id) { return data[i]; // 找到目标节点 } else if (data[i].children && data[i].children.length > 0) { var result = findNode(id, data[i].children); // 递归在子节点查找 if (result) { return result; // 在子节点找到了目标节点 } } } return null; // 未找到目标节点 } ``` 以上代码,我们传入要查询的节点id和树形结构数据数组,例如`findNode(3, data)`,其`data`是树形结构数据。函数会递归查找并返回具有指定id的节点对象,如果找不到则返回null。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值