js 数组变成树结构

const obj = {}
let arr = [
     {
    id: 20, // id
    // pid: 5 // 父级id
  },
  {
    id: 10, // id
    pid: 5 // 父级id
  },
  {
    id: 1,
    pid: 2
  },
  {
    id: 3,
    pid: 4
  },
  {
    id: 2,
    pid: 3
  },
  {
    id: 100,
    pid: 5
  },
  {
    id: 10099,
    pid: 6
  },
  {
    id: 1000,
    pid: 100
  }
]

arr.forEach((i, index) => {
    i.index = index
    obj[i.id] = i
})

arr.forEach((i, index) => {
    if (i.pid) {
        if (obj[i.pid]) {
            let pitem = arr[obj[i.pid].index]
            if (!pitem.c) pitem.c = []
            pitem.c.push(i)
            i.r = true
        }
    }
})

let newarr = arr.filter(i => !i.r)

console.log(newarr)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 需要对数组进行截取,一般是使用循环,现在发现一个方式: array.splice(开始删除的index,结束删除的...
    时子释阅读 820评论 0 0
  • 1、方法思路使用js数组自带的filter()方法;数据格式要求,父子节点通过,Id,ParentId进行关联。默...
    xx_Zero阅读 975评论 0 1
  • 前言 在编程的大多数情况下我们的需求都是将数组扁平化进行降维,但是确实有那么些情况是要我们将数组进行在分类,从而要...
    nuannuan_nuan阅读 5,029评论 1 3
  • 先玩个小游戏吧 抛一枚硬币,如果正面朝上,你将获得50元,背面朝上你将损失50元,你是否愿意参加这个游戏? 但是事...
    向往的布拉格阅读 823评论 0 0
  • 还记得高二下期那段时间,为了在高压下静下心来,我每天下午吃完饭都会回到教室,坐在靠窗的位置练字,一个人静静地坐着,...
    鬼鬼404阅读 173评论 0 0