我有一个扁平化的数组作为输入,我需要以树格式重构它

问题描述

nullparent_uid一个节点也是最顶层的节点。 输入-:

[
{uid: "d86161ab-1838-4cd3-afc2-20a32c08e88f",parent_uid: null},{uid: "c64eb64e-1291-4833-b646-947f1a64a1cf",parent_uid: "d86161ab-1838-4cd3-afc2-20a32c08e88f"},{uid: "93976670-6272-4cca-ac18-73bb3345d95c",{uid: "17c19db6-cde9-4581-a49e-c279faae922c",{uid: "ebb92286-58e5-49dc-a9db-30a5aec378b0",{uid: "df25c86a-b34a-42f4-8c4c-7c419dc97dc8",parent_uid: "df25c86a-b34a-42f4-8c4c-7c419dc97dc8"},{uid: "f3bbe5bf-d56b-4e00-9991-40f27cf2b8e8",{uid: "9de2cd38-ba16-4ec0-bcd7-b2d1a4a75e3f",{uid: "f800ed46-a894-418e-bb3a-e0c317a244fa",{uid: "11eb90e1-b527-4e88-be70-cad4a2a60bdd",{uid: "aaa6ff31-13d2-57d0-ef49-d8962884cedb",{uid: "81004b95-37e8-9096-918c-64fbab3b7cd7",{uid: "1cfdacf8-c7bb-481c-503a-ef88665a07c9",{uid: "13e4e12a-2e33-f69f-fe83-5fb9c2d7a869",parent_uid: "9de2cd38-ba16-4ec0-bcd7-b2d1a4a75e3f"},{uid: "c480d612-0a67-105f-efc1-dd248962f1fd",{uid: "44a7b3c8-5672-fac1-1b98-1f173cab2737",parent_uid: "13e4e12a-2e33-f69f-fe83-5fb9c2d7a869"}
]

解决方法

您可以使用reduce方法通过递归方法执行此操作,并传递uid,然后在嵌套调用中使用parent_uid进行检查。

const data = [{"uid":"d86161ab-1838-4cd3-afc2-20a32c08e88f","parent_uid":null},{"uid":"c64eb64e-1291-4833-b646-947f1a64a1cf","parent_uid":"d86161ab-1838-4cd3-afc2-20a32c08e88f"},{"uid":"93976670-6272-4cca-ac18-73bb3345d95c",{"uid":"17c19db6-cde9-4581-a49e-c279faae922c",{"uid":"ebb92286-58e5-49dc-a9db-30a5aec378b0",{"uid":"df25c86a-b34a-42f4-8c4c-7c419dc97dc8","parent_uid":"df25c86a-b34a-42f4-8c4c-7c419dc97dc8"},{"uid":"f3bbe5bf-d56b-4e00-9991-40f27cf2b8e8",{"uid":"9de2cd38-ba16-4ec0-bcd7-b2d1a4a75e3f",{"uid":"f800ed46-a894-418e-bb3a-e0c317a244fa",{"uid":"11eb90e1-b527-4e88-be70-cad4a2a60bdd",{"uid":"aaa6ff31-13d2-57d0-ef49-d8962884cedb",{"uid":"81004b95-37e8-9096-918c-64fbab3b7cd7",{"uid":"1cfdacf8-c7bb-481c-503a-ef88665a07c9",{"uid":"13e4e12a-2e33-f69f-fe83-5fb9c2d7a869","parent_uid":"9de2cd38-ba16-4ec0-bcd7-b2d1a4a75e3f"},{"uid":"c480d612-0a67-105f-efc1-dd248962f1fd",{"uid":"44a7b3c8-5672-fac1-1b98-1f173cab2737","parent_uid":"13e4e12a-2e33-f69f-fe83-5fb9c2d7a869"}]

function toTree(data,pid = null) {
  return data.reduce((r,e) => {
    if (pid === e.parent_uid) {
      const obj = { ...e }
      const children = toTree(data,e.uid);
      if (children.length) obj.children = children;
      r.push(obj)
    }

    return r;
  },[])
}

const result = toTree(data);
console.log(result)