Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环通过json树对象并创建新数组_Javascript_Loops_Ecmascript 6 - Fatal编程技术网

Javascript 循环通过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:[ "

有没有一种好方法可以让JS/ES6遍历对象及其子对象并创建新的对象树数组

我有一个json树对象:

[
{
    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:[操作,支持]}]。。最好的方法是什么?