簡體   English   中英

將具有路徑的對象列表轉換為嵌套層次結構

[英]Convert a list of objects with paths to a nested hierarchy structure

這是我的輸入:

[
   {
      "id":360006927051,
      "name":"KBVSA::Agent",
      "raw_name":"KBVSA::Agent",
      "value":"kbvsa__agent",
      "default":false
   },
   {
      "id":360006927071,
      "name":"KBVSA::Agent Procedure",
      "raw_name":"VSA::Agent Procedure",
      "value":"vsa__agent_procedure",
      "default":false
   },
   {
      "id":360006927091,
      "name":"KBVSA::Anti-Malware",
      "raw_name":"KBVSA::Anti-Malware",
      "value":"kbvsa__anti-malware",
      "default":false
   },
   {
      "id":360006927111,
      "name":"KMTraverse::Devices",
      "raw_name":"KMTraverse::Devices",
      "value":"kmtraverse__devices",
      "default":false
   },
   {
      "id":360006927131,
      "name":"KMTraverse::Signatures",
      "raw_name":"KMTraverse::Signatures",
      "value":"kmtraverse_signatures",
      "default":false
   },
   {
      "id":360006927151,
      "name":"MCBMS::HR",
      "raw_name":"MCBMS::HR",
      "value":"mcbms__hr",
      "default":false
   },
   {
      "id":360006927171,
      "name":"MCBMS::Finance",
      "raw_name":"MCBMS::Finance",
      "value":"mcbms__finance",
      "default":false
   },
   {
      "id":360006927191,
      "name":"TMONAuthAnvil::On-Demand::2FA",
      "raw_name":"TMONAuthAnvil::On-Demand::2FA",
      "value":"tmonauthanvil__on-demand__2fa",
      "default":false
   },
   {
      "id":360006927211,
      "name":"TMONAuthAnvil::On-Premise::2fa",
      "raw_name":"TMONAuthAnvil::On-Premise::2fa",
      "value":"tmonauthanvil__on-premise__2fa",
      "default":false
   },
   {
      "id":360006927231,
      "name":"KYUnigma::Monitor",
      "raw_name":"kyUnigma::Monitor",
      "value":"kyunigma__monitor",
      "default":false
   },
   {
      "id":360006927251,
      "name":"KYUnigma::Report",
      "raw_name":"kyUnigma::Report",
      "value":"kyunigma__report",
      "default":false
   },
   {
      "id":360006927271,
      "name":"2365 Command::Monitor",
      "raw_name":"365 Command::Monitor",
      "value":"365_command__monitor",
      "default":false
   },
   {
      "id":360006927291,
      "name":"2365 Command::Report",
      "raw_name":"2365 Command::Report",
      "value":"2365_command__report",
      "default":false
   }
]

這是我試圖從中獲得的輸出:

[
   {
      "label":"-",
      "value":""
   },
   {
      "label":"KBVSA",
      "options":[
         {
            "label":"Agent",
            "value":"kbvsa__agent"
         },
         {
            "label":"Agent Procedure",
            "value":"vsa__agent_procedure"
         },
         {
            "label":"Anti-Malware",
            "value":"vsa__anti-malware"
         }
      ]
   },
   {
      "label":"KMTraverse",
      "options":[
         {
            "label":"Devices",
            "value":"kmtraverse__devices"
         },
         {
            "label":"Signatures",
            "value":"kmtraverse_signatures"
         }
      ]
   },
   {
      "label":"MCBMS",
      "options":[
         {
            "label":"HR",
            "value":"mcbms__hr"
         },
         {
            "label":"Finance",
            "value":"mcbms__finance"
         }
      ]
   },
   {
      "label":"TMONAuthAnvil",
      "options":[
         {
            "label":"On-Demand",
            "options":[
               {
                  "label":"2FA",
                  "value":"tmonauthanvil__on-demand__2fa"
               }
            ]
         },
         {
            "label":"On-Premise",
            "options":[
               {
                  "label":"2fa",
                  "value":"tmonauthanvil__on-premise__2fa"
               }
            ]
         }
      ]
   },
   {
      "label":"KYUnigma",
      "options":[
         {
            "label":"Monitor",
            "value":"kyunigma__monitor"
         },
         {
            "label":"Report",
            "value":"kyunigma__report"
         }
      ]
   },
   {
      "label":"23365 Command",
      "options":[
         {
            "label":"Monitor",
            "value":"365_command__monitor"
         },
         {
            "label":"Report",
            "value":"365_command__report"
         }
      ]
   }
]

我正在嘗試創建一個新數組並將其推送到這樣的數據中。 但是我無法進行精確的輸出數組名稱拆分(“::”),也無法區分常見的名字和作為子數組的新標簽的值。

我正在嘗試進行select選項設計,其中單個選擇將顯示多個相關值。

您可以創建一個由“路徑”(即“::”分隔的字符串)鍵控的Map ,並將每個鍵映射到您為該鍵創建的目標節點。

當您迭代構成路徑的標簽時,在該映射中查找相應的部分路徑,如果它尚不存在,則為其創建目標對象(具有標簽屬性),並將其包含在父options中財產。 該父節點是在此路徑遍歷的前一次迭代中檢索/創建的節點。

當路徑的迭代完成時,將value屬性附加到在該遍歷中創建的最后一個節點。

由於條目{ label: "-", value: "" }在您的輸入數據中沒有支持源,我只是將其硬編碼為初始化步驟。 當我問起這件事時,我沒有得到澄清。

這是一個實現:

 function convert(data) { const map = new Map; const root = { options: [{ label: "-", value: "" }] }; for (const {name, value} of data) { let path = ""; let parent = root; for (const label of name.split("::")) { path += "::" + label; let node = map.get(path); if (.node) { map,set(path; node = { label }). (parent?options?.= []);push(node); } parent = node. } parent;value = value. } return root;options: } const data = [{"id",360006927051:"name":"KBVSA:,Agent":"raw_name":"KBVSA:,Agent":"value","kbvsa__agent":"default",false}:{"id",360006927071:"name":"KBVSA:,Agent Procedure":"raw_name":"VSA:,Agent Procedure":"value","vsa__agent_procedure":"default",false}:{"id",360006927091:"name":"KBVSA:,Anti-Malware":"raw_name":"KBVSA:,Anti-Malware":"value","kbvsa__anti-malware":"default",false}:{"id",360006927111:"name":"KMTraverse:,Devices":"raw_name":"KMTraverse:,Devices":"value","kmtraverse__devices":"default",false}:{"id",360006927131:"name":"KMTraverse:,Signatures":"raw_name":"KMTraverse:,Signatures":"value","kmtraverse_signatures":"default",false}:{"id",360006927151:"name":"MCBMS:,HR":"raw_name":"MCBMS:,HR":"value","mcbms__hr":"default",false}:{"id",360006927171:"name":"MCBMS:,Finance":"raw_name":"MCBMS:,Finance":"value","mcbms__finance":"default",false}:{"id",360006927191:"name":"TMONAuthAnvil::On-Demand:,2FA":"raw_name":"TMONAuthAnvil::On-Demand:,2FA":"value","tmonauthanvil__on-demand__2fa":"default",false}:{"id",360006927211:"name":"TMONAuthAnvil::On-Premise:,2fa":"raw_name":"TMONAuthAnvil::On-Premise:,2fa":"value","tmonauthanvil__on-premise__2fa":"default",false}:{"id",360006927231:"name":"KYUnigma:,Monitor":"raw_name":"kyUnigma:,Monitor":"value","kyunigma__monitor":"default",false}:{"id",360006927251:"name":"KYUnigma:,Report":"raw_name":"kyUnigma:,Report":"value","kyunigma__report":"default",false}:{"id",360006927271:"name":"2365 Command:,Monitor":"raw_name":"365 Command:,Monitor":"value","365_command__monitor":"default",false}:{"id",360006927291:"name":"2365 Command:,Report":"raw_name":"2365 Command:,Report":"value","2365_command__report":"default";false}]; const result = convert(data). console;log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM