angular - 需要转换具有父子关系的对象数组并转换为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
}
]
解决方案
具有递归函数的解决方案
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));
推荐阅读
- php - 如何翻译 Voyager 页面块
- azure - Azure 管道未运行
- flutter - 为什么当我在 Flutter 中明确设置应将 Snackbar 显示为 false 的条件时,Snackbar 会在下面的代码中重新显示?
- reactjs - 获取数据后反应不渲染数组
- mysql - mysql 恢复命令和授予权限
- networking - 如何在 GNS3 中将 FastEthernet 端口添加到以太网交换机?
- windows - MSVC 中的自定义构建步骤和自定义构建工具
- r - 在 R 中使用 lubridate make_datetime 后未知的日期列类
- c++ - 是否可以让 CTAD 接受模板类型别名?
- javascript - 如何从 Firebase 身份验证获取 Twitter 用户名 - Javascript