多个树形结构数组如何合并为一个树结构?
题目描述
[
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": []
}],
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": []
}],
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": [{
"folderId": null,
"folderName": "第二层",
"parentId": null,
"parentName": "测试",
"fileList": [],
"children": []
}]
}],
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": [{
"folderId": null,
"folderName": "第二层",
"parentId": null,
"parentName": "测试",
"fileList": [],
"children": []
}]
}],
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": [{
"folderId": null,
"folderName": "第二层",
"parentId": null,
"parentName": "测试",
"fileList": [],
"children": [{
"folderId": null,
"folderName": "第三层",
"parentId": null,
"parentName": "第二层",
"fileList": [],
"children": []
}]
}]
}],
[{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": [{
"folderId": null,
"folderName": "第二层",
"parentId": null,
"parentName": "测试",
"fileList": [],
"children": [{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": "第二层",
"fileList": [],
"children": []
}]
}]
}]
]
希望将上面数组用js转化成下面格式,请问如何实现呢
[
{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": null,
"fileList": [],
"children": [
{
"folderId": null,
"folderName": "第二层",
"parentId": null,
"parentName": "测试",
"fileList": [],
"children": [
{
"folderId": null,
"folderName": "第三层",
"parentId": null,
"parentName": "第二层",
"fileList": [],
"children": []
},
{
"folderId": null,
"folderName": "测试",
"parentId": null,
"parentName": "第二层",
"fileList": [],
"children": []
}
]
}
]
}
]
回复
1个回答

test
2024-07-04
你可以用递归来实现:
const data = [
// 这里是你给出的原始数据
];
function mergeTrees(trees) {
const result = {};
const uniqueKey = 'folderName';
function mergeNode(node, resultNode) {
if (!resultNode.children) {
resultNode.children = [];
}
const existingNode = resultNode.children.find(
(child) => child[uniqueKey] === node[uniqueKey]
);
if (existingNode) {
node.children.forEach((child) => mergeNode(child, existingNode));
} else {
resultNode.children.push(node);
}
}
trees.forEach((tree) => {
tree.forEach((node) => {
mergeNode(node, result);
});
});
return result.children;
}
const mergedTree = mergeTrees(data);
console.log(mergedTree);
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容