JavaScript 树状数组根据子节点查找所有父节点

const findPatentValue = (array, value, valueName = 'value', childrenName = 'children') => {
    if (!value || !Array.isArray(array)) return []
    const result = []
    let valid = false
    const seek = (array, value) => {
        let parentValue = ''
        const up = (array, value, lastValue) => {
            array.forEach(v => {
                const val = v[valueName]
                const child = v[childrenName]
                if (val === value) {
                    valid = true
                    parentValue = lastValue
                    return
                }
                if (child && child.length) up(child, value, val)
            })
        }
        up(array, value)
        if (parentValue) {
            result.unshift(parentValue)
            seek(array, parentValue)
        }
    }
    seek(array, value)
    return valid ? [...result, value] : []
}

Test

const array = [
    {
        value: 'A',
        children: [
            {
                value: '_A1',
                children: [
                    {
                        value: '__A1'
                    }
                ]
            },
            {
                value: '_A2'
            }
        ]
    },
    {
        value: 'B',
        children: [
            {
                value: '_B1'
            },
            {
                value: '_B2',
                children: [
                    {
                        value: '__B2',
                        children: [
                            {
                                value: '___B2',
                                children: [
                                    {
                                        value: '____B2'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                value: '_B3',
                children: [
                    {
                        value: '__B3',
                        children: [
                            {
                                value: '___B3',
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

console.log(findParent(array, '___B2')) // => ["B", "_B2", "__B2", "___B2"]

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值