[英]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.