首页 > 其他分享 >js 树级数组扁平化和扁平化数组整理成树级

js 树级数组扁平化和扁平化数组整理成树级

时间:2023-06-08 18:44:46浏览次数:40  
标签:扁平化 parent 成树级 item 数组 树级 children

1.扁平化数组整理为树级,主要实现方法,过滤出没有父级标识(parentId)的作为列表的第一层,有父级标识的项放在其父级的children下面,也跟数组是引用类型的有很大关系

父级标识为falsy或者 父级为某个特定值(topValue)时,该项就在树级的顶级

function list2Tree(list, key = "id", parentKey = "parentId", topValue="0") {
 return list.filter((item, index, arr) => {
    if (!item[parentKey] || item[parentKey] === topValue) {
      return true
    } else {
      const parent = arr.find(data => data[key] === item[parentKey])
      if (parent) {
        parent.children = parent.children || []
        parent.children.push(item)
      }
    }
  })
}

2. 树级数组扁平化,主要技术点:reduce方法累计已遍历到的项、递归遍历下级数组

function tree2List(tree) {
  return tree.reduce((preResult, item, index, arr) => {
    const { children, ...data } = item;
    return preResult.concat(
      data,
      children && children.length ? tree2List(children) : []
    );
  }, []);
}

 

标签:扁平化,parent,成树级,item,数组,树级,children
From: https://www.cnblogs.com/blackbentel/p/17467379.html

相关文章

  • js数组sort方法排序
    数组的sort方法可以对数组进行排序,默认是按照字符编码的顺序进行排序,可以自定义规则。sort方法会修改原数组。自定义规则简述:比较函数两个参数a和b,(a是b的后一个元素),返回a-b升序,返回b-a降序。letarr=[3,5,2,9,1];arr.sort();//默认升序arr.sort((a,b)=>{//......
  • 数组
    数组27.移除元素-力扣(Leetcode)给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素......
  • 69 遍历数组 将参数以数组形式传递
    packagecom.fqs.test;publicclasshello{publicstaticvoidmain(String[]args){//需求:设计一个方法用于数组遍历每次可以写100个数组,将数组打印出来;要求遍历的结果是在一行上的。例如:[11,22,33,44,55]int[]arr={1,2,3,4,5};getArr(a......
  • 数组和元祖数据类型
    使用案例来讲解TS的数组类型和元祖类型数组类型方式一要求:定义一个数组这个数组只能存储数值类型的数据letvalArr:Array<Number>//定义一个数组类型存储数值valArr=[1,2,3]//正常valArr=["1","2",3];//会报错console.log(valArr);方式二字符串数组类型......
  • LeetCode 915.分割数组
    LeetCode915.分割数组思路模拟题,两遍遍历,因为要保证左侧区间尽可能小,所以就要找到最左面的适合的点,所以第一遍先从最右边开始记录前缀最小的数,之后再从左往右遍历一遍记录当前最大的前缀,同时将当前最大前缀与下一位的最小前缀比较,如果小于下一位的最小前缀则直接输出即可代码class......
  • LeetCode 907.子数组的最小值之和
    LeetCode907.子数组的最小值之和本题由于每一项都需要遍历到,所以我们要计算所有可能的排列组合情况,所以这道题我们应该从每个元素分别出发,构建单调栈,找到每个元素左边和右边第一个比他小的元素,在这个区间范围内,我们可以断定任何一个子区间得到的最小值都是当前选定这个元素,所以最......
  • LeetCode 862.和至少为k的最短子数组
    LeetCode862.和至少为k的最短子数组本题前缀和队列并不单调,所以应该算变种单调队列,在计算出单调队列以后还要进行进一步优化,即在如下条件如果我们找到当前的s[i]满足条件,则说明之后选取的s[i]不管是多少,均没有当前s[i]距离s[j]近,所以在此以后的值均可以丢弃,同理,s[j]之前的值也是......
  • JS 模拟 Java 动态数组(类)
     Code:/***动态数组*@class*/varDArray=(function(){/***数据数组*@type{*[]}*/letdata;/***数组中的元素个数*@type{number}*/letsize;/***调整数组容器大小*@param{number}new_capacity*/co......
  • 多态数组
    多态数组的应用1多态数组数组的定义类型为父类类型,里面保存的实际元素类型为子类类型继承结构如下:创建1个Person对象,2个Student对象和2个Teacher对象,统一放在数组中,并调用say方法父类Person:packagehspedu.poly_.polyarr_;publicclassPerson{privateString......
  • 数组和元祖数据类型
    使用案例来讲解TS的数组类型和元祖类型数组类型方式一要求:定义一个数组这个数组只能存储数值类型的数据letvalArr:Array<Number>//定义一个数组类型存储数值valArr=[1,2,3]//正常valArr=["1","2",3];//会报错console.log(valArr);方式二字符串数组......