首页 > 其他分享 >构造树型结构数据

构造树型结构数据

时间:2022-10-10 11:24:44浏览次数:48  
标签:构造 children childrenListMap let parentId 树型 config id 结构

/**
 * 构造树型结构数据
 * @param {*} data 数据源
 * @param {*} id id字段 默认 'id'
 * @param {*} parentId 父节点字段 默认 'parentId'
 * @param {*} children 孩子节点字段 默认 'children'
 */
export function handleTree(data, id, parentId, children) {
    let config = {
        id: id || 'id',
        parentId: parentId || 'parentId',
        childrenList: children || 'children'
    };

    var childrenListMap = {};
    var nodeIds = {};
    var tree = [];

    for (let d of data) {
        let parentId = d[config.parentId];
        if (childrenListMap[parentId] == null) {
            childrenListMap[parentId] = [];
        }
        nodeIds[d[config.id]] = d;
        childrenListMap[parentId].push(d);
    }

    for (let d of data) {
        let parentId = d[config.parentId];
        if (nodeIds[parentId] == null) {
            tree.push(d);
        }
    }

    for (let t of tree) {
        adaptToChildrenList(t);
    }

    function adaptToChildrenList(o) {
        if (childrenListMap[o[config.id]] !== null) {
            o[config.childrenList] = childrenListMap[o[config.id]];
        }
        if (o[config.childrenList]) {
            for (let c of o[config.childrenList]) {
                adaptToChildrenList(c);
            }
        }
    }
    return tree;
}

 

标签:构造,children,childrenListMap,let,parentId,树型,config,id,结构
From: https://www.cnblogs.com/yan122/p/16774968.html

相关文章

  • 代码随想录 day18|513. 找树左下角的值 112. 路径总和 113. 路径总和 II 105. 从前序
    513.找树左下角的值题目|文章1.前序遍历思路题目的要求是先是最底层最左边的节点的值,我们使用前序遍历可以保证是最左边的值,通过深度变化时对节点更新,可以保证是最底......
  • 尚硅谷-JavaWeb Day6 JavaEE三层架构及web分层结构
    JavaEE三层架构介绍分层的目的是为了解耦,解耦就是为了降低代码耦合度,方便项目后期的维护和升级; web层:com.xxx.web/servlet/controllerservice层:com.xxx.serv......
  • 上位笔记_01_窗口间传递信息(构造函数)
    在登录窗口登录后,给下一级窗口传递当前登录用户名登录按键中进行新窗口实例创建构造函数中增加对username的初始化  ......
  • 冯诺依曼结构和哈佛结构区别
    冯诺依曼结构和哈佛结构区别为:存储器结构不同、总线不同、执行效率不同。一、存储器结构不同1、冯诺依曼结构:冯诺依曼结构是一种将程序指令存储器和数据存储器合并在一起......
  • JVM结构和执行流程
    先说几个关键点:栈:1.每个线程创建一个栈,栈存方法执行信息2.栈线程私有无法共享堆:1.JVM全局唯一的2.所有线程共享的3.堆中存对象信息,对......
  • JavaScript-栈结构
     1.认识栈结构 后进先出       2.栈的面试题   不是一次性进栈,是可以一边进一边出的  3.栈结构的封装  操作   封装<!DOC......
  • 数据结构基础—栈和队列
    数据结构基础—栈和队列一、栈和队列的基本概念和性质栈和队列都是特殊的线性表对他们的操作有着规定和限制:在插入和删除时只能对某一端操作栈:只能在一端进行(先进后......
  • 流程结构及基本数据类型常见内置方法
    本周内容总结概要垃圾回收机制if分支结构while循环for循环整型内置方法浮点型内置方法字符串常用操作列表常用操作字典常用操作集合常用操作元组常用操作字......
  • Mybatis——plus 条件构造器(EntityWrapper)
    持久层框架解决的就是数据访问的问题。Mybatis Plus 是mybatis的搭档,更方便的去进行持久层的操作。 在数据访问中,有一个比较大的问题是条件查询。我们在开发过程中肯定少......
  • laravel DB类,查询构造器
    laravel分为三大数据库操作(DBfacade[原始查找],查询构造器[QueryBuilder],EloquentORM):1,DBfacadeuseIlluminate\Support\Facades\DB;DB::select('select*from......