Javascript 循环通过json树对象并创建新数组
有没有一种好方法可以让JS/ES6遍历对象及其子对象并创建新的对象树数组 我有一个json树对象:Javascript 循环通过json树对象并创建新数组,javascript,loops,ecmascript-6,Javascript,Loops,Ecmascript 6,有没有一种好方法可以让JS/ES6遍历对象及其子对象并创建新的对象树数组 我有一个json树对象: [ { id: "001", deparmentsIds: [ "002", "003" ], details: { parentDeparmentsId: null, name: "Top" } }, { id: "002", deparmentsIds:[ "
[
{
id: "001",
deparmentsIds: [
"002",
"003"
],
details: {
parentDeparmentsId: null,
name: "Top"
}
},
{
id: "002",
deparmentsIds:[
"004"
],
details: {
parentDeparmentsId: ["001"],
name: "Operations"
}
},
{
id: "003",
deparmentsIds:[]
details: {
parentDeparmentsId: ["001"],
name: "Support"
}
},
{
id: "004",
deparmentsIds:[]
details: {
parentDeparmentsId: ["002"],
name: "Support operations"
}
}
]
我想创建新的对象数组树,如下所示:
您可以使用reduce和map方法创建递归函数来创建嵌套对象结构 const data=[{id:001,deparmentsIds:[002003],详细信息:{parentDeparmentsId:null,name:Top}},{id:002,deparmentsIds:[004],详细信息:{parentDeparmentsId:001,name:Operations},{id:003,deparmentsIds:[],详细信息:{parentdeparentsid:001,name:Support}},{id:004,deparmentsIds:[],详细信息:{parentdeparentsid:002,name:Support Operations}] 函数树输入,父ID{ 返回input.reducer,e=>{ 如果e.id==parentId | | parentId==undefined&&e.details.parentDeparmentsId==null{ const children=[].concat…e.deparmentsIds.mapid=>treeinput,id 常量对象={ [e.详细信息.名称]:儿童 } r、 普肖布 } 返回r; }, [] } 常数结果=树数据
logresult您可以使用单个循环收集对象中的所有信息,并仅返回没有父节点的节点 函数getTreedata,root{ var o={}; data.forEach{id,详细信息:{parentDeparmentsId:parent,name}=>{ var temp={id,name}; 如果o[id]&&o[id]。子项{ temp.children=o[id]。children; } o[id]=温度; o[父]=o[父]|{}; o[parent]。children=o[parent]。children | |[]; o[parent].children.pushtemp; }; 返回o[root]。子对象; } var data=[{id:001,deparmentsIds:[002,003],详细信息:{parentDeparmentsId:null,name:Top}},{id:002,deparmentsIds:[004],详细信息:{parentDeparmentsId:[001],name:Operations},{id:003,deparmentsIds:[],详细信息:{parentdeparentsid:[001],name:Support}},{id:004,deparentsids:[],详细信息:{parentdeparentsid:[002],名称:支持操作}}], tree=getTreedata,空; logtree;
.as控制台包装器{max height:100%!important;top:0;}JS中的预期结构是什么而不是html?html仅用于显示结构。如果为True,我们将获得所需的结构。但我们需要的是如何在JS中表示相同的内容。我现在明白你的意思了。。。也许是这样的?部门=[{top:[操作,支持]}]。。最好的方法是什么?