首页 > 解决方案 > 需要转换具有父子关系的对象数组并转换为primeng树表节点

问题描述

给定具有父子关系的扁平化对象数组列表。我需要转换为素数 ng 树表数据结构。我想一次扩展所有的孩子。

我的最终目标是具有以下结构:

[{
        "data":{
            "name":"Pictures",
            "size":"150kb",
            "type":"Folder"
        },
        "children":[
            {
                "data":{
                    "name":"barcelona.jpg",
                    "size":"90kb",
                    "type":"Picture"
                }
            },
            {
                "data":{
                    "name":"primeui.png",
                    "size":"30kb",
                    "type":"Picture"
                }
            },
            {
                "data":{
                    "name":"optimus.jpg",
                    "size":"30kb",
                    "type":"Picture"
                }
            }
        ]
    }]

给定 json 数组:

 data = [
    {
        dataId: 1,
        name: test1,
        description: 'some desc',
        parentId: null
    },
    {
        dataId: 2,
        name: test1,
        description: 'some desc',
        parentId: 2
    },
    {
        dataId: 3,
        name: test1,
        description: 'some desc',
        parentId: 1
    },
    {
        dataId: 4,
        name: test1,
        description: 'some desc',
        parentId: null
    }
]

标签: angularrecursionecmascript-6primengtreetable

解决方案


具有递归函数的解决方案

function getDataByParentId(data, parent) {
  const result = data
    .filter(d => d.parentId === parent);

  if (!result && !result.length) {
    return null;
  }

  return result.map(({ dataId, name, description }) => 
    ({ dataId, name, description, children: getDataByParentId(data, dataId) }))
}

const data = [{
    dataId: 1,
    name: 'test1',
    description: 'some desc',
    parentId: null
  },
  {
    dataId: 2,
    name: 'test2',
    description: 'some desc',
    parentId: 1
  },
  {
    dataId: 3,
    name: 'test3',
    description: 'some desc',
    parentId: 1
  },
  {
    dataId: 4,
    name: 'test4',
    description: 'some desc',
    parentId: null
  },
  {
    dataId: 5,
    name: 'test5',
    description: 'some desc',
    parentId: 4
  },
  {
    dataId: 6,
    name: 'test6',
    description: 'some desc',
    parentId: 5
  }
];

console.log(getDataByParentId(data, null));


推荐阅读