获取子节点的所有祖父节点-ts

获取子节点的所有祖父节点-ts

/*
* for in (数组、对象)key值遍历
* for of 数组、系统内置的伪数组(arguments等)、字符串、Set 和 Map 结构,不能遍历对象—返回值
* 判断结果只有一句是可以不写花括号
* */
interface IItemObj{
  label: string,
  value: number,
  children?: IItemObj[]
}

type GetNodes = (treeOptions: IItemObj[], treeIds: number[]) => number[][]

let treeOptions: IItemObj[] = [
  {
    label: '我的',
    value: 1,
    children: [
      {
        label: '我的信息',
        value: 2,
        children: [
          {
            label: '我的基础信息',
            value: 3
          },
          {
            label: '我的信息积分信息',
            value: 10,
            children: [
              {
                label: '我的基础信息',
                value: 11,
                children: [
                  {
                    label: '我的基础信息',
                    value: 12
                  },
                ]
              },
            ]
          }
        ]
      },
      {
        label: '我的邀请',
        value: 4
      }
    ]
  },
  {
    label: '首页',
    value: 5,
    children: [
      {
        label: '首页列表',
        value: 6
      },
      {
        label: '首页目录',
        value: 7
      }
    ]
  }
]

/// 获取子节点的所有祖父节点(没有查询到返回[])
let getNodes: GetNodes = (treeOptions, treeIds) => {
  const fn = (children: IItemObj[], id: number): number[] => {
    for(let op of children){
      if(op.value === id) return ([op.value])
      if(op?.children){
        let ids = fn(op.children, id)
        if(ids) return ([op.value, ...ids])
      }
    }
  }
  return treeIds.map(id => fn(treeOptions, id) || [])
}

console.log(getNodes(treeOptions, [11, 5, 3]))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值