当前位置:网站首页>JS: 数组和树的相互转换
JS: 数组和树的相互转换
2022-08-04 18:45:00 【你吃香蕉吗?】
一、数组转树
let arr = [{
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "111",
"bdictDesc": "测试1",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "222",
"bdictDesc": "测试2",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "333",
"bdictDesc": "测试3",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "444",
"bdictDesc": "测试4",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "555",
"bdictDesc": "测试5",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA",
"bdictDesc": "测试6",
"bparentCode": "0",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA01",
"bdictDesc": "测试7",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA0101",
"bdictDesc": "测试8",
"bparentCode": "DOCA01",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA0102",
"bdictDesc": "测试9",
"bparentCode": "DOCA01",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA0103",
"bdictDesc": "测试10",
"bparentCode": "DOCA01",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA02",
"bdictDesc": "测试11",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA03",
"bdictDesc": "测试12",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA0301",
"bdictDesc": "测试13",
"bparentCode": "DOCA03",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA0302",
"bdictDesc": "测试14",
"bparentCode": "DOCA03",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA04",
"bdictDesc": "测试15",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA05",
"bdictDesc": "测试16",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA06",
"bdictDesc": "测试17",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA07",
"bdictDesc": "测试18",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA08",
"bdictDesc": "测试19",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA09",
"bdictDesc": "测试20",
"bparentCode": "DOCA",
"validStatus": "1"
}, {
"categoryCode": "90000",
"categoryCnName": "A1级别",
"bdictCode": "DOCA10",
"bdictDesc": "测试21",
"bparentCode": "DOCA",
"validStatus": "1"
}, ]
function arrayToTree(list, parentID) {
const child = function(pareID) {
//先定义一个数组,用于存储所查到的子元素
const childs = [];
//循环数组
for (let i = 0; i < list.length; i++) {
//如果数组其中一项的bparentCode等于传入的,说明这一项是传入的子元素,把他push进数组,然后重复递归自己找该项的子元素
if (list[i].bparentCode === pareID) {
if (child(list[i].bdictCode).length > 0) {
list[i].children = child(list[i].bdictCode);
}
childs.push(list[i]);
}
}
//最后将查到的所有子元素返回
return childs;
};
return child(parentID);
}
let res = arrayToTree(arr, '0')
console.log(res);
二、树转数组
树转数组,实现的要点还是在于递归查找,定义一个空数组,去接收没有children属性的每一项
let treeRes = [];
function tree2arr(res) {
res.forEach(item => {
if (!item.children) {
treeRes.push(item)
} else {
tree2arr(item.children)
}
})
}
// 此处的res取的是上边的数组转树的结果
tree2arr(res)
console.log(treeRes);边栏推荐
- ACP-Cloud Computing By Wakin自用笔记(2)CPU和内存虚拟化
- win10 uwp MetroLog 入门
- 实验室专利书写指南
- gbase8s创建RANGE分片表
- Day018 继承
- 在线生成接口文档
- 如何进行自动化测试?【Eolink分享】
- Develop those things: How to obtain the traffic statistics of the monitoring site through the EasyCVR platform?
- How can test engineers break through career bottlenecks?
- JS 问号?妙用
猜你喜欢

火灾报警联网FC18中CAN光端机常见问题解答和使用指导

如何进行自动化测试?【Eolink分享】

The CPU suddenly soars and the system responds slowly, what is the cause?Is there any way to check?

Matlab drawing 1

How does EasyCVR call the double-speed playback of device recording through the interface?

2018年南海区小学生程序设计竞赛详细答案

智能视频监控平台EasyCVR如何使用接口批量导出iframe地址?

路由技术

How does the intelligent video surveillance platform EasyCVR use the interface to export iframe addresses in batches?

机器学习——线性回归
随机推荐
八一建军节 | 致敬中国人民解放军
win10 uwp 动态修改ListView元素布局
Activity数据库字段说明
【填空题】130道面试填空题
ACP-Cloud Computing By Wakin自用笔记(2)CPU和内存虚拟化
Global electronics demand slows: Samsung's Vietnam plant significantly reduces capacity
链表的经典入门LeetCode题目
【AI+医疗】斯坦福大学最新博士论文《深度学习在医学影像理解中的应用》,205页pdf
当项目中自动格式化插件Prettier和ESLint冲突报错时如何解决
服务器
【web自动化测试】Playwright快速入门,5分钟上手
MMDetection 使用示例:从入门到出门
工业元宇宙对工业带来的改变
win10 uwp MVVM 轻量框架
基于 eBPF 的 Kubernetes 可观测实践
浅谈web网站架构演变过程
Google Earth Engine APP - one-click online viewing of global images from 1984 to this year and loading an image analysis at the same time
LVS+NAT 负载均衡群集,NAT模式部署
敏捷开发项目管理的一些心得
用Excel绘制统计图