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"]
    
    
    为之则易,不为则难。
  • 相关阅读:
    C#获取Word文档页数,并跳转到指定的页面获取页面信息
    GC 垃圾回收
    Open Flash Chart 之线图
    Open Flash Chart 之线图(二)
    Nullable可空类型
    System.AppDomain类
    C# 事件
    C#方法的参数 Ref Out Params 4种类型的参数
    单向链表
    C# 结构体 struct
  • 原文地址:https://www.cnblogs.com/coderDemo/p/14297938.html
Copyright © 2011-2022 走看看