Js对象转树形结构

项目中常见的一种数据处理的需求,就是将后端返回的json对象转成树形结构。

1
2
3
4
5
6
7
8
    let data = [
    { id: 1, parent: null, text: '菜单1' },
    { id: 11, parent: 1, text: '菜单1-1' },
    { id: 12, parent: 1, text: '菜单1-2' },
    { id: 2, parent: null, text: '菜单2' },
    { id: 21, parent: 2, text: '菜单2-1' },
    { id: 22, parent: 2, text: '菜单2-2' }
]

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
1、先遍历源数据,根据parent父级节点获取到一级菜单list
2、遍历list,接着递归(传入子级的parent和children属性)
3、判断如果子级菜单中没有children就删除该属性
*/
function jsonTree(data, p, list) {
    for (let item of data) {
        if (item.parent == p) list.push(item);
    }
    for (let i of list) {
        i.children = [];
        jsonTree(data, i.id, i.children);
        if(i.children.length == 0) delete i.children;
    }
    return list;
}
console.log(jsonTree(data, null, []));

  

 

posted @   紫诺花开  阅读(668)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2021-04-08 ant design vue 中tree实现单选
点击右上角即可分享
微信分享提示