当前位置:网站首页>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);边栏推荐
猜你喜欢
随机推荐
如何给MySQL添加自定义语法 ?
Alibaba Cloud International Edition uses ROS to build WordPress tutorial
不论你是大众,科班和非科班,我这边整理很久,总结出的学习路线,还不快卷起来
WPF 元素裁剪 Clip 属性
The upgrade of capacity helps the flow of computing power, the acceleration moment of China's digital economy
Activity数据库字段说明
Route lazy loading
巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...
实验室专利书写指南
当前最快的实例分割模型:YOLACT 和 YOLACT++
动态数组底层是如何实现的
margin 塌陷和重合的理解
win10 uwp DataContext
win10 uwp 使用 Geometry resources 在 xaml
curl命令的那些事
开发那些事儿:如何通过EasyCVR平台获取监控现场的人流量统计数据?
[Distributed Advanced] Let's fill in those pits in Redis distributed locks.
FE01_OneHot-Scala Application
阿里云国际版使用ROS搭建WordPress教程
部署LVS-DR群集









