扁平数据根据`parentId`生成树结构

根据每项的parentId,生成具体树形结构的对象。

const nest = (items, id = null, link = ‘parent_id‘) =>
  items
    .filter(item => item[link] === id)
    .map(item => ({ ...item, children: nest(items, item.id) }));

const comments = [
  { id: 1, parent_id: null },
  { id: 2, parent_id: 1 },
  { id: 3, parent_id: 1 },
  { id: 4, parent_id: 2 },
  { id: 5, parent_id: 4 }
];

const nestedComments = nest(comments); // [{ id: 1, parent_id: null, children: [...] }]

原文地址:https://www.cnblogs.com/zhenguo-chen/p/12032230.html

时间: 2024-11-12 10:55:41

扁平数据根据`parentId`生成树结构的相关文章

List 无限分类生成树结构

在处理无限树分类中,因为子类中的pid 是重复出现的,所以在获取所有子类的父类时使用了list.contains来判断父类是否已经保存在,如果存在,则不往list中添加,来过滤重复的pid,得到一个唯一的pid列表.为了能正确判断是否存丰父类,重写了AllTree的equals方法. AllTree实现Comparable接口为了给树排序用,但此处并没有用来排序,感觉这样排序来代码量大,不如在数据表中直接用sql语名根据一定的规则先把所有的树排好序来的简单. 经过测试,总体还算基本满意,能完成我

js把树形数据转成扁平数据

我就直接上代码了都是实际项目里面用到的 1.假设这个json就已经是树型结构数据了(如果不知道怎么实现树型结构数据请看我另一篇博客) var compressedArr=afcommon.treeDataToCompressed(json); /*******************************JS封装好的方法*********************************************/ var afcommon=(function ($) { var prefix="

【数据泵】EXPDP导出表结构

[数据泵]EXPDP导出表结构(真实案例) BLOG文档结构图 ? ? ? ? 因工作需要现需要把一个生产库下的元数据(表定义,索引定义,函数定义,包定义,存储过程)导出到测试库上,本来以为很简单的,可是做的过程发现很多的问题,现记录如下,希望有同样需要的朋友不要再走弯路了. ? ? 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① EXPDP和IMPDP如何导出导入元数据,包括表定义,索引定义,函数定义,包定义,存储过程(重点

什么是结构化数据?什么是半结构化数据?

概述 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档.文本.图片.XML.HTML.各类报表.图像和音频/视频信息等等. 非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字.符号等信息)而且更适合处理非结构化数据(全文文本.图象.声音.影视.超媒体等信息). 非结构化WEB数据库主要是针对非结构化

数据结构中常用树型结构简介

B树.B-树.B+树.B*树.红黑树rbtree 二叉排序树.trie树Double Array 字典查找树 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报

mysql数据表的基本操作:表结构操作,字段操作

本节介绍: 表结构操作 创建数据表. 查看数据表和查看字段. 修改数据表结构 删除数据表 字段操作 新增字段. 修改字段数据类型.位置或属性. 重命名字段 删除字段 首发时间:2018-02-18  21:31 表结构操作 创建数据表: 语法  : create table [if not exists] 表名( 字段名字 数据类型, 字段名字 数据类型 )[表选项]; 表选项  : 字符集:charset表中存储数据的字符集 校对集:colloate表中用来校对数据的校对集 存储引擎  :en

生成树算法 and PVST+配置案例

生成树算法1.选择根网桥网桥ID(前2字节为网桥优先级,范围0~65535 默认是32768,后6字节是网桥的MAC地址,可以使用show version 命令查看)2.选择根端口(1)到根网桥最低的根路径成本(2)直连的网桥ID最小(3)端口ID最小3.选择指定端口(1)根路径成本较低(2)所在交换机的网桥ID值较小(3)端口ID最小利用PVST+实现网络的负载均衡···PVST+配置案例经过STP选举,交换机sw1为根网桥,sw2的f1/1,sw3的f1/1为根端口,sw2的f1/0口成为指

javascrip将具有父子关系的节点数据转成树结构

1 function toTreeData(data){ 2 var pos={}; 3 var tree=[]; 4 var i=0; 5 while(data.length!=0){ 6 if(data[i].parentid==0){ 7 tree.push({ 8 resid:data[i].resid, 9 caption:data[i].caption, 10 href:data[i].href, 11 children:[] 12 }); 13 pos[data[i].resid]

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青