首页 > 其他分享 >js数组对象转树结构

js数组对象转树结构

时间:2023-06-04 19:33:07浏览次数:44  
标签:name parent 树结构 js item 数组 parentId 节点 id

原始数组对象:

let arr = [
    { id: 1, name: "节点1", parentId: 0 },
    { id: 2, name: "节点2", parentId: 1 },
    { id: 3, name: "节点3", parentId: 1 },
    { id: 4, name: "节点4", parentId: 2 },
    { id: 5, name: "节点5", parentId: 3 },
    { id: 6, name: "节点6", parentId: 5 },
    { id: 7, name: "节点7", parentId: 6 },
    { id: 8, name: "节点8", parentId: 6 }
];

1、非递归算法

function listToTree(data){
    let idObj={}
    data.forEach(item => {
        idObj[item.id]=item
    })
    let treeData=[]
    data.forEach(item=>{
        let parent=idObj[item.parentId]
        if(parent){
            parent.children=parent.children||[]
            parent.children.push(item)
        }else{
            treeData.push(item)
        }
    })
    return treeData
}

2、递归算法

function listToTreeLoop(data){
    function getNode(id){
        let arr=[]
        data.forEach((item)=>{
            if(item.parentId==id){
                item.children=getNode(item.id)
                arr.push(item)
            }
        })
        return arr
    }
    return getNode(0)
}

处理结果:

标签:name,parent,树结构,js,item,数组,parentId,节点,id
From: https://www.cnblogs.com/772330747wh/p/17456166.html

相关文章

  • 高并发下的Node.js与负载均衡
     新兴的Node.js已经吸引了很多开发人员的眼光,它提供给我们一个快速构建高性能的网络应用的平台。我也开始逐步投入node.js的怀抱,在学习和使用的过程中,遇到了一些问题,也有一些经验,我觉得有必要写出来,作为总结,也用作分享。众所周知,node.js基于v8引擎,所以它本身并不支持多线程(有多线......
  • jsp调用数据库
    deviceInfos.jsp<%@pageimport="java.io.BufferedReader"%><%@pageimport="java.io.FileReader"%><%@pageimport="java.io.*"%><%@pageimport="java.sql.*"%><%@pagelanguage="java&qu......
  • 第五章 数组
    1.数组的概述‍1.1概念‍概念:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。简称:多个数据的组合‍数组中的概念数组名下标(或索引)元素数组的长度​​‍数组的特点:数组本身是​引用数据类型​,而数组中的元......
  • nodejs调试工具
    Node应用调试工具debugger文档 http://nodejs.org/api/debugger.html内置的调试工具,支持基本的断点功能NodeInspector主页 https://github.com/node-inspector/node-inspector通过BlinkDeveloperTools提供的网页版JS调试工具来调试Node程序.NodeEclipse主页 http:......
  • 数组的均值分割
    给定你一个整数数组 nums我们要将 nums 数组中的每个元素移动到 A 数组或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A)==average(B)首先将问题转化为求目标和为特定值将所有数乘以n减去总和,转化成为求目标值为为0的数组,同时避免出现小数情况1.折......
  • uniapp中js中的闭包使用
    问题:在uniapp里面,使用闭包函数处理的时候,会导致$this不能全局使用。 解决方案:第一种代码写法(以循环为例):constobj={a:1,b:2,c:3}varkeys=Object.getOwnPropertyNames(obj)keys.forEach(function(key){console.log(key+'--......
  • node.js安装及环境配置教程【Windows系统安装包方式】
    一、下载安装包:https://nodejs.org/zh-cn/download/注:根据自己电脑系统及位数选择,我的电脑是Windows系统、64位、想下载稳定版的.msi(LTS为长期稳定版)这里选择windows64位.msi格式安装包。.msi和.zip格式区别:.msi是Windowsinstaller开发出来的程序安装文件,它可以让你安装,修改,......
  • SpringMVC 3使用Fastjson代替Jackson
    [size=large][color=red]Json解析教程(四.FastJson的使用)[/color][/size][url]http://zyjustin9.iteye.com/blog/2020533[/url]1.[代码][Java]代码publicclassUser{privateLongid;privateStringname;publicLonggetId(){retur......
  • Dropzone JS 使用指南(文件拖拽上传)
    JavaScript文件拖拽上传插件dropzone.js介绍[url]https://www.renfei.org/blog/dropzone-js-introduction.html[/url]DropzoneJS使用指南(文件拖拽上传)[url]http://www.open-open.com/lib/view/open1448610841329.html[/url]后台资料:基于SpringMVC的......
  • 树状数组的思想复习
    树状数组的复习前言:学树状数组的时候第一没理解透彻,第二还没写博客用于复习,所以这里写一下用于复习树状数组:作用:lognlogn时间实现单点修改区间查询;区间修改单点查询;区间修改区间查询。但是区间修改区间查询还是线段树好,因为扩展性很强特点:父子节点关系例如当前节点为x,那么......