求教,把平铺的数据递归成树状数据

有一个这样关联关系的数据:

const list = [
    {  id: '1', pId: '', name: '1' },
    {  id: '1.1', pId: '1', name: '1.1' },
    {  id: '1.1.1', pId: '1.1', name: '1.1.1' },
    {  id: '2', pId: '', name: '2' },
    {  id: '2.1', pId: '2', name: '2.1' },
    {  id: '2.1.1', pId: '2.1', name: '2.1.1' },
    {  id: '2.1.2', pId: '2.1', name: '2.1.2' }
  ]

想要把它递归成如下结构:

const list1 = [
    {
      id: '1',
      pId: '',
      name: '1',
      children: [
        {
          id: '1.1',
          pId: '1',
          name: '1.1'
          }
      ]
    },
  ]

请教下怎么写。

阅读 2.4k
1 个回答

主要是遍历然后判断父元素。

let list = [
  {  id: '1', pId: '', name: '1' },
  {  id: '1.1', pId: '1', name: '1.1' },
  {  id: '1.1.1', pId: '1.1', name: '1.1.1' },
  {  id: '2', pId: '', name: '2' },
  {  id: '2.1', pId: '2', name: '2.1' },
  {  id: '2.1.1', pId: '2.1', name: '2.1.1' },
  {  id: '2.1.2', pId: '2.1', name: '2.1.2' },
  {  id: '2.1.1.1', pId: '2.1.1', name: '2.1.1.1' },
].map(item => {
  item.children = [];
  return item;
});

list = list.map(item => {
  let p = list.filter(r => r.pId === item.id);
  if (p.length > 0) {
    let child = item.children.find(child => child.pId === p.id);
    if (!child) {
      item.children.push(p);
    }
  }
  return item;
}).filter(item => !item.pId);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题