js 递归树结构,根据子节点获取父节点

遍历数组,根据子节点查询父节点中的各个层

js 递归树结构,根据子节点获取父节点_第1张图片

需求

目前只知道【节点6】,想要知道【节点6】在哪棵树上

预期结果:返回一个层级数组

[2, 6]

实际情况:找到结果,并正确打断跳出

js 递归树结构,根据子节点获取父节点_第2张图片

源码

// 数据源
const dataSource = [
      {
        id: 1,
        label: 'Level one 1',
        children: [
          {
            id: 4,
            label: 'Level two 1-1',
            children: [
              {
                id: 9,
                label: 'Level three 1-1-1'
              },
              {
                id: 10,
                label: 'Level three 1-1-2'
              }
            ]
          }
        ]
      },
      {
        id: 2,
        label: 'Level one 2',
        children: [
          {
            id: 5,
            label: 'Level two 2-1'
          },
          {
            id: 6,
            label: 'Level two 2-2'
          }
        ]
      },
      {
        id: 3,
        label: 'Level one 3',
        children: [
          {
            id: 7,
            label: 'Level two 3-1'
          },
          {
            id: 8,
            label: 'Level two 3-2'
          }
        ]
      }
    ]
    // 查找父节点
    function findP(id, list = [], result = []) {
      for (let i = 0; i < list.length; i += 1) {
        console.log('*******', list[i].id, '********')
        const item = list[i]
        // 找到目标
        if (item.id === id) {
          console.log('找到了')
          // 加入到结果中
          result.push(item.id)
          // 因为可能在第一层就找到了结果,直接返回当前结果
          if (result.length === 1) return result
          return true
        }
        // 如果存在下级节点,则继续遍历
        if (item.children) {
          // 预设本次是需要的节点并加入到最终结果result中
          result.push(item.id)
          const find = findP(id, item.children, result)
          // 如果不是false则表示找到了,直接return,结束递归
          if (find) {
            return result
          }
          // 到这里,意味着本次并不是需要的节点,则在result中移除
          result.pop()
        }
      }
      // 如果都走到这儿了,也就是本轮遍历children没找到,将此次标记为false
      return false
    }

    console.log('最终:', findP(6, dataSource.value))

你可能感兴趣的:(javascript)