题目描述
[
[{
"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": []
}
]
}
]
}
]
你可以用递归来实现:
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);
如果你确定每个数组里面,只包含一个元素(不算子元素),可以用一种简单的方法解决
let str=JSON.stringify(arr) //把你的数组转成json字符串
str=str.replaceAll('[{',"{") //替换字符
str=str.replaceAll('}]',"}")
let obj=JSON.parse(str) //把字符串还原为对象
console.log(obj)