【JS递归、树形数据结构】树型数据结构递归、树形数据结构铺平

1、递归

递归找到树形数据中匹配的某条数据

	// 递归找到选中的id
	const keyArr: any[] = []
    const getAssignedTask = (data: any[], id?: string) => {
        data.forEach(item => {
            if (item.children) {
                if (item.executorId === id) {
                    keyArr.push(item.id)
                }
                getAssignedTask(item.children, id)
            } else {
                if (item.executorId === id) {
                    keyArr.push(item.id)
                }
            }
        })
        return keyArr
    }

2.铺平树形结构数据

    // 铺平数结构
    const list: any[] = []
    const flatTreeAndSetLevel = (tree: any[], type = 'children') => {
        if (tree.length == 0) {
            return []
        }
        tree.forEach((item: any) => {
            const copyData = JSON.parse(JSON.stringify(item))
            delete copyData[type]
            list.push(copyData)
            if (item.children && item.children.length > 0) {
                flatTreeAndSetLevel(item[type])
            }
        })
        return list
    }

3.数据铺平后找到所有父级

    // 找到所有父级节点
    const getParentAreas = (pid: string, data: any[]) => {
        if (!pid) {
            return []
        }
        const target: any[] = []
        const o = data.find(item => item.id == pid) || {}
        if (JSON.stringify(o) != '{}' && o.parentId) target.push(o.parentId)
        if (o.parentId) target.push(...getParentAreas(o.parentId, data))
        return target
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值