树形结构拍平获取所有节点

Posted 落叶飘飘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形结构拍平获取所有节点相关的知识,希望对你有一定的参考价值。

打开收藏夹发现还有18年未完成的文章,
粗略看了下发现竟然还能看懂,
目的是把一个树形结构拍平获取所有的节点。

获取树形结构的所有节点

let tree = {
    "id": 1,
    "label": "一级 1",
    "children": [{
        "id": 3,
        "label": "二级 2-1",
        "children": [{
            "id": 4,
            "label": "三级 3-1-1"
        }, {
            "id": 5,
            "label": "三级 3-1-2",
            "disabled": true
        }]
    }, {
        "id": 2,
        "label": "二级 2-2",
        "disabled": true,
        "children": [{
            "id": 6,
            "label": "三级 3-2-1"
        }, {
            "id": 7,
            "label": "三级 3-2-2",
            "disabled": true
        }]
    }]
}
/**
 * 把树形结构拍平获取所有节点
 * @method   getNode
 * @param    {Object}                node 要拍平结构的树对象
 * @return   {Array}                      拍平后的节点数组,不包含节点的子节点信息
 * @author 朱阳星
 * @email  zhuyangxing@foxmail.com
 * @datetime 2018-04-01T16:42:52+080
 */
function getNode(node) {
    let result = []
    let _getNode = function (node) {
        let tmp =JSON.parse(JSON.stringify(node))
        delete tmp.children
        result.push(tmp) //移除拍平数组的子元素,只保留节点相关元素
        let child = node.children
        if (child != undefined && child.length > 0) {
            child.forEach(ele=>{
                arguments.callee(ele)
            })
        }
    }
    _getNode(node)
    _getNode=null
    return result
}
let result = getNode(tree)
console.log(result)
// 返回结果如下
[
  { id: 1, label: \'一级 1\' },
  { id: 3, label: \'二级 2-1\' },
  { id: 4, label: \'三级 3-1-1\' },
  { id: 5, label: \'三级 3-1-2\', disabled: true },
  { id: 2, label: \'二级 2-2\', disabled: true },
  { id: 6, label: \'三级 3-2-1\' },
  { id: 7, label: \'三级 3-2-2\', disabled: true }
]

以上是关于树形结构拍平获取所有节点的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类

MYSQL 查询树形结构数据,查询某个节点下的所有子节点数据。

sqlserver查询树形结构的所有子节点

MongoDB树形数据存储

在sqlserver中实现树形结构中根、子节点数据的添加、修改