数组转化成树

6 篇文章 0 订阅
3 篇文章 0 订阅

数组转化成树

  • 要实现效果的数组
data = 
[
  {id:"01", name: "张大大", pid:"", job: "项目经理"},
  {id:"02", name: "小亮", pid:"01", job: "产品leader"},
  {id:"03", name: "小美", pid:"01", job: "UIleader"},
  {id:"04", name: "老马", pid:"01", job: "技术leader"},
  {id:"05", name: "老王", pid:"01", job: "测试leader"},
  {id:"06", name: "老李", pid:"01", job: "运维leader"},
  {id:"07", name: "小丽", pid:"02", job: "产品经理"},
  {id:"08", name: "大光", pid:"02", job: "产品经理"},
  {id:"09", name: "小高", pid:"03", job: "UI设计师"},
  {id:"10", name: "小刘", pid:"04", job: "前端工程师"},
  {id:"11", name: "小华", pid:"04", job: "后端工程师"},
  {id:"12", name: "小李", pid:"04", job: "后端工程师"},
  {id:"13", name: "小赵", pid:"05", job: "测试工程师"},
  {id:"14", name: "小强", pid:"05", job: "测试工程师"},
  {id:"15", name: "小涛", pid:"06", job: "运维工程师"}
]

如何实现?

		一步一步慢慢来,你就ok了
const data = [
  { id: '01', name: '张大大', pid: '', job: '项目经理' },
  { id: '02', name: '小亮', pid: '01', job: '产品leader' },
  { id: '03', name: '小美', pid: '01', job: 'UIleader' },
  { id: '04', name: '老马', pid: '01', job: '技术leader' },
  { id: '05', name: '老王', pid: '01', job: '测试leader' },
  { id: '06', name: '老李', pid: '01', job: '运维leader' },
  { id: '07', name: '小丽', pid: '02', job: '产品经理' },
  { id: '08', name: '大光', pid: '02', job: '产品经理' },
  { id: '09', name: '小高', pid: '03', job: 'UI设计师' },
  { id: '10', name: '小刘', pid: '04', job: '前端工程师' },
  { id: '11', name: '小华', pid: '04', job: '后端工程师' },
  { id: '12', name: '小李', pid: '04', job: '后端工程师' },
  { id: '13', name: '小赵', pid: '05', job: '测试工程师' },
  { id: '14', name: '小强', pid: '05', job: '测试工程师' },
  { id: '15', name: '小涛', pid: '06', job: '运维工程师' }
]

// 1.创建项目经理的对象
let xmjl = {}

// 把项目经理摘出来
data.forEach(item => {
  item.lable = item['name']
  delete item.name
  delete item.job
  if (item.id === '01') {
    // console.log(item)
    delete item.id
    delete item.pid
    xmjl = item
  }
})
// 2.给项目经理对象创建一个 Children数组
xmjl.Children = []

// 遍历数组 把 项目经理的小跟班找到
data.forEach(item => {
  if (item.pid === '01') {
    // 解构赋值 不然会改变他的原数据
    const newobj = { ...item }
    // 给新对象创建一个Children数组
    newobj.Children = []
    // 把这些数据全都插入到项目经理的数组里
    xmjl.Children.push(newobj)
    // console.log(newobj)
  }
})
// 筛选出 不是经理的人员
const a = data.filter(function(item) {
  return item.pid !== '' && item.pid !== '01'
})

// 遍历筛选出来的人员
a.forEach(item => {
  // 和项目经理手下的经理一一比对
  xmjl.Children.forEach(obj => {
    // 如果是他的人,就插入到哪个经理的children下
    if (item.pid === obj.id) {
      // console.log(item)
      // 把当前的人员插入到各项目经理下
      delete item.id
      delete item.pid
      obj.Children.push(item)
      // console.log(obj)
    }
  })
})
xmjl.Children.forEach(item => {
  delete item.id
  delete item.pid
})
console.log(xmjl)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值