首页 > 其他分享 >js树状结构数据处理

js树状结构数据处理

时间:2023-02-20 11:55:30浏览次数:40  
标签:children name 树状 pid js v1 数据处理 data id

使用了两个for循环,为了方便理解,可以理解为父亲找儿子,把儿子写入家族谱

// pid:父id,为0是最顶级数据,其他则对应每项的id,即父.id = 子.pid,则父.children = 子

interface Tree {

  id: number

  pid: number

  name: string

}

 

let data: Tree[] = [
  { id: 1, pid: 0, name: '广东省' },
  { id: 2, pid: 0, name: '上海市' },
  { id: 3, pid: 0, name: '福建省' },
  { id: 4, pid: 1, name: '深圳市' },
  { id: 5, pid: 1, name: '珠海市' },
  { id: 6, pid: 2, name: '上海市' },
  { id: 7, pid: 3, name: '厦门市' },
  { id: 8, pid: 1, name: '广州市' },
  { id: 9, pid: 8, name: '天河区' },
  { id: 10, pid: 4, name: '南山区' },
  { id: 11, pid: 4, name: '福田区' }
]

/**
 * 处理树状数据函数
 * @param data 原始树状数据
 * @return 处理后的树状数据
 */
function getTrees(data: Tree[]) {
  // 父亲找儿子,把儿子写入家族谱
  data.forEach((v, i, arr) => {
    // v:儿子
    arr.forEach((v1: any, y) => {
      // v1:父亲
      if (v1.id == v.pid) {
        // 父亲找到儿子了,就添加到children
        if (!v1.children) v1.children = []
        v1.children.push(v)
      }
    })
  })
  return data
}
let newTrees = getTrees(trees)

let newArr = newTrees.filter((v) => v.pid == 0)
console.log(newArr)

 

标签:children,name,树状,pid,js,v1,数据处理,data,id
From: https://www.cnblogs.com/jinbang/p/17136836.html

相关文章

  • AJAX-概念、AJAX-实现-原生JS方式
    AJAX-概念概念:ASynchronousJavaScriptAndXML异步的JavaScript和XML1.异步和同步:客户端和服务器端相互通信的基础上*客户端必须等待服......
  • 树状数组
    树状数组介绍首先我们需要知道树状数组可以维护一些什么值,树状数组主要维护的值就是区间的前缀和。因此普通的树状数组需要满足结合律和可差分的性质。比如乘法、加法、异......
  • html引入js文件加 defer ,defer 什么作用
    在HTML中引入JavaScript文件时,可以使用defer属性,该属性可以推迟(defer)脚本的执行,即等到整个HTML文档解析完毕后才执行脚本。使用defer属性可以避免在解析HTML......
  • js遍历
    1js的遍历方式for(初始化值;循环结束条件;步长)2jq的遍历方式1jq对象.each(callback)语法:jquery对象.each(function(index,element){});......
  • vue中使用vis.js制作流程图
    效果安装vis.jsnpmivis.js--save中文文档:https://ame.cool/pages/a7d858/#network-关系图示例:https://visjs.github.io/vis-network/examples/在vue2中使用impor......
  • JS上传大文件的三种解决方案
    ​ 原理js将大文件分成多分,全部上传成功之后,调用合并接口合成文件。如果传输中断,下次上传的时候过滤掉已经上传成功的分片,将剩余的分片上传,成功之后合并文件。前置条件......
  • 实现方法继承 js 230220
    需求让子对象可用父方法让子构造指向父构造存在的问题如果给子构造的原型添加独有方法会影响到父构造的原型与实际需求的逻辑不符合问题复现代码:functionAnimal(){thi......
  • 根据两点经纬度计算两点间距离 js
    getDistance(lat1,lng1,lat2,lng2){letradLat1=lat1*Math.PI/180.0;letradLat2=lat2*Math.PI/180......
  • 读Java实战(第二版)笔记15_并行数据处理与性能
    1. Stream1.1. 允许你声明性地将顺序流转变成并行流1.2. 能对这些集合执行操作流水线,可以充分利用计算机的多个核2. 并行流2.1. 把内容拆分成多个数据块,用不同线......
  • JSR303字段校验规则(笔记)
    ###直接上示例代码引入依赖(如果项目中没有的话)<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId>......