题目描述
[ [{ "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)