多个树形结构数组如何合并为一个树结构?

作者站长头像
站长
· 阅读数 10

题目描述

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