zoukankan      html  css  js  c++  java
  • 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"]
    
    
    为之则易,不为则难。
  • 相关阅读:
    ●BZOJ 2669 [cqoi2012]局部极小值
    ●HDU 6021 MG loves string
    试试数学公式~
    ●BZOJ 3622 已经没有什么好害怕的了
    ●BZOJ 2560 串珠子
    ●BZOJ 4361 isn
    ●BZOJ 2393 Cirno的完美算数教室
    ●BZOJ 1042 [HAOI2008]硬币购物
    ●BZOJ 2839 集合计数
    【LG2481】[SDOI2011]拦截导弹
  • 原文地址:https://www.cnblogs.com/coderDemo/p/14297938.html
Copyright © 2011-2022 走看看