树形数组对象扁平化与反向转换

将树形数组对象扁平化是将具有层级结构的对象数组转换成一个简单的、没有嵌套的对象数组的过程。这通常涉及到递归遍历树结构,并将每个节点添加到一个新的数组中。下面是一个使用JavaScript实现这一过程的例子:

function flattenTree(tree) {  let result = [];  function traverse(node) {  result.push(node); // 将当前节点添加到结果数组中  if (node.children) {  // 如果当前节点有子节点,递归遍历子节点  for (let child of node.children) {  traverse(child);  }  }  }  // 从树的根节点开始遍历  for (let node of tree) {  traverse(node);  }  return result;  
}  // 假设我们有一个树形数组对象  
let treeArray = [  {  id: 1,  name: 'A',  children: [  {  id: 2,  name: 'B',  children: [  { id: 4, name: 'D' },  { id: 5, name: 'E' }  ]  },  {  id: 3,  name: 'C',  children: [  { id: 6, name: 'F' }  ]  }  ]  }  
];  // 扁平化树形数组对象  
let flatArray = flattenTree(treeArray);  console.log(JSON.stringify(flatArray, null, 2));

运行这个函数后,flatArray 将会是一个扁平化的数组对象,如下所示:

[  {  "id": 1,  "name": "A"  },  {  "id": 2,  "name": "B"  },  {  "id": 4,  "name": "D"  },  {  "id": 5,  "name": "E"  },  {  "id": 3,  "name": "C"  },  {  "id": 6,  "name": "F"  }  
]

扁平化数组对象组装成树形数组对象

扁平化数组对象组装成树形数组对象是一个常见的编程问题。这通常涉及到将一组具有父子关系的对象转换成一个树形结构。以下是一个基本的步骤和示例,说明如何实现这一过程。

假设你有以下的扁平化数组对象(JavaScript格式):

let flatArray = [  { id: 1, name: 'A', parent_id: null },  { id: 2, name: 'B', parent_id: 1 },  { id: 3, name: 'C', parent_id: 1 },  { id: 4, name: 'D', parent_id: 2 },  { id: 5, name: 'E', parent_id: 2 },  { id: 6, name: 'F', parent_id: 3 },  
];function buildTree(items, parentId = null) {  let tree = [];  let children = [];  for (let i = 0; i < items.length; i++) {  if (items[i].parent_id === parentId) {  children = (buildTree(items, items[i].id);  if (children.length) {  items[i].children = children;  }  tree.push(items[i]);  }  }  return tree;  
}  let treeArray = buildTree(flatArray);  
console.log(JSON.stringify(treeArray, null, 2));

运行这个函数后,treeArray将会是一个树形结构的数组对象,如下所示:

[  {  "id": 1,  "name": "A",  "parent_id": null,  "children": [  {  "id": 2,  "name": "B",  "parent_id": 1,  "children": [  {  "id": 4,  "name": "D",  "parent_id": 2  },  {  "id": 5,  "name": "E",  "parent_id": 2  }  ]  },  {  "id": 3,  "name": "C",  "parent_id": 1,  "children": [  {  "id": 6,  "name": "F",  "parent_id": 3  }  ]  }  ]  }  
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现线上阅读系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现线上阅读系统演示 摘要 随着社会发展速度的愈来愈快&#xff0c;以及社会压力变化的越来越快速&#xff0c;致使很多人采取各种不同的方法进行解压。大多数人的稀释压力的方法&#xff0c;是捧一本书籍&#xff0c;心情地让自己沉浸在情节里面&#xff0c;以…

基于沁恒微 ch643q 多通道采集 adc 驱动层实现

一、代码 #include "main.h"/********************************************************************** fn ADC_Function_Init** brief Initializes ADC collection.** return none*/ void ADC_Function_Init(void) {ADC_InitTypeDef ADC_InitStructure …

pdffactory pro 8中文破解版

详细介绍 PdfFactory&#xff0c;PDF文档虚拟打印机&#xff0c;无须Acrobat即可创建Adobe PDF文件&#xff0c;创建PDF文件的方法比其他方法更方便和高效。支持将多个文档整合到一个PDF文件、增加字体和便签、PDF加密、去水印、压缩优化。 FinePrint&#xff0c;Windows虚拟…

【踩坑】修复xrdp无法关闭Authentication Required验证窗口

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 问题如下&#xff0c;时不时出现&#xff0c;有时还怎么都关不掉&#xff0c;很烦&#xff1a; 解决方法一&#xff1a;命令行输入 dbus-send --typemethod_call --destorg.gnome.Shell /org/gnome/Shell org.gn…

js 面试题--事件循环event loop--宏任务和微任务

1 事件循环event loop概念&#xff1a; js 是非阻塞单线程语言&#xff0c;js在执行过程中会产生执行环境&#xff0c;执行环境会按顺序添加到执行栈中&#xff0c;先执行同步栈中的任务&#xff0c;当遇到异步任务时会添加到task队列中&#xff0c;同步栈执行完后&#xff0c…

一文读懂什么是 OCR 识别

在数字化时代&#xff0c;信息处理和数据管理是企业运营的重要环节。然而&#xff0c;手工输入信息存在效率低和准确性低的问题&#xff0c;严重影响了企业的工作流程和决策过程。因此&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;识别技术的应用变得…

mbatis应用到的设计模式

Builder&#xff1a;SqlSessionFactoryBuilder、XMLConfigBuiler、Environment 工厂方法&#xff1a;SqlSessionFactory、TransactionFactory、LogFactory 单例&#xff1a;ErrorContext、LogFactory 代理&#xff1a;mybatis核心&#xff0c;MapperProxy、ConnectionLogger…

【Unity】导入IAP插件后依赖冲突问题 com.android.billingclient冲突

【Unity】Attribute meta-data#com.google.android.play.billingclient.version 多版本库冲突_unity billingclient-CSDN博客 打开mainTemplate.gradle 找到dependencies { } 在里面末尾加上如下&#xff1a; configurations.all {exclude group: com.android.billingclien…

uni-app 实现拍照后给照片加水印功能

遇到个需求需要实现&#xff0c;研究了一下后写了个demo 本质上就是把拍完照后的照片放到canvas里&#xff0c;然后加上水印样式然后再重新生成一张图片 代码如下&#xff0c;看注释即可~使用的话记得还是得优化下代码 <template><view class"content"&g…

单词倒排——c语言解法

以下是题目&#xff1a; 这个题中有三个点&#xff0c; 一个是将非字母的字符转换为空格&#xff0c; 第二是如果有两个连续的空格&#xff0c; 那么就可以将这两个连续的空格变成一个空格。 第三个点就是让单词倒排。 那么我们就可以将这三个点分别封装成三个函数。 还有就是…

iOS-UILabel调整行间距

方法&#xff1a; 封装了以下方法&#xff0c;传入参数调整行间距 - (NSAttributedString *)getAttributedStringWithString:(NSString *)string lineSpace:(CGFloat)lineSpace {NSMutableAttributedString *attributedString [[NSMutableAttributedString alloc] initWithS…

特征融合篇 | YOLOv8 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

linux系统Jenkins的安装

Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码&#xff0c;更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…

静态链表(1)

什么叫静态链表&#xff1f;——用顺序表模拟链表&#xff0c;就叫做静态链表 第一列相当于数据域data&#xff0c;第二列相当于指针域next&#xff0c; 第一行&#xff08;0&#xff09;相当于头结点&#xff08;头结点的数据域不放数据&#xff09; &#xff08;a&#xff…

模拟面试/面试题

面试&#xff1a; 简历 - 解释简历&#xff1a; 简历 - 解释简历 1: 自我介绍 声音大一点 连贯一点 1&#xff1a; 个人基本信息 2&#xff1a; 个人技术介绍 重点 写一篇口语稿 1&#xff1a;会的技术内容 编程语言 每门语言掌握的内容 2&#xff1a;CS基本功底 3&#xff…

【Unity每日一记】角色控制器Character Contorller

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…

解决内嵌帆软报表出现重定向问题

最近收到反馈&#xff0c;某些程序的前端通过iframe标签内嵌finebi帆软报表时&#xff0c;出现一系列问题。 问题1: 如下图所示&#xff0c;单点登录(单点登录地址schema是https)后service地址的schema协议是http, 浏览器内核的安全策略不允许http访问https。 解决方案&#xf…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…

如何鉴别医疗设备防漏费系统的实用性

19339904493&#xff08;康溪&#xff09; 市场上有很多医疗设备防漏费系统&#xff0c;鱼龙混杂。有些系统安装后不但效果不好&#xff0c;还增加了医生的负担&#xff0c;不但需要手动输号&#xff0c;本来需要做一次的动作&#xff0c;安装系统后需要重复两次。还有的是效果…