Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 将中的树数据转换为以层次结构路径为数组的平面数据_Javascript_Angular_Typescript_Data Structures - Fatal编程技术网

Javascript 将中的树数据转换为以层次结构路径为数组的平面数据

Javascript 将中的树数据转换为以层次结构路径为数组的平面数据,javascript,angular,typescript,data-structures,Javascript,Angular,Typescript,Data Structures,我有以下数据。我需要创建一个平面数据结构,其层次结构为数组。如何使用递归函数创建它 var tree = [{ "name": "Firm", "id": 1, "children": [{ "name": "veniam", "id": 2 }, { "name": "officia", "id": 3 },

我有以下数据。我需要创建一个平面数据结构,其层次结构为数组。如何使用递归函数创建它

    var tree = [{
    "name": "Firm",
    "id": 1,
    "children": [{
            "name": "veniam",
            "id": 2
        },
        {
            "name": "officia",
            "id": 3
        },
        {
            "name": "ullamco",
            "id": 4
        },
        {
            "name": "duis",
            "id": 5,
            "children": [{
                "name": "aliquip",
                "id": 6,
                "children": [
                    {
                        "name": "culpa",
                        "id": 7
                    },
                    {
                        "name": "qui",
                        "id": 8
                    },
                    {
                        "name": "cillum",
                        "id": 9
                    }
                ]
            }]
        },
        {
            "name": "ullamco",
            "id": 10
        },
    ]
}];
我想要的结果应该是这样的

[{
            "name": "Firm",
            "id": 1,
            "path": [1]
        },
        {
            "name": "veniam",
            "id": 2,
            "path": [1, 2]
        },
        {
            "name": "officia",
            "id": 3,
            "path": [1, 3]
        },
        {
            "name": "ullamco",
            "id": 4,
            "path": [1, 4]
        },
        {
            "name": "duis",
            "id": 5,
            "path": [1, 5]
        },
        {
            "name": "aliquip",
            "id": 6,
            "path": [1, 5, 6]
        },
        ...
        {
            "name": "ullamco",
            "id": 10,
            "path": [1, 10]
        }
    ]  

有人能帮忙吗?

您可以使用
reduce
方法并创建一个递归函数

var-tree=[{“name”:“Firm”,“id”:1,“children”:[{“name”:“veniam”,“id”:2},{“name”:“officia”,“id”:3},{“name”:“ullamco”,“id”:4},{“name”:“duis”,“id”:5,“children”:[{“name”:“aliquip”,“id”:6,“children”:[{“name”:“culpa”,“id”:7},{“name”:“qui”,“id”:8},{“name”:“cillum”,“id”:“id”:9},{“name”:“duis”,“id”:“aliquip”,“ullamco”,“id],”10}]
函数平面(数据,上一个=[]){
返回数据.reduce((r,{id,name,children})=>{
let path=prev.concat(id)
如果(儿童)右推(…平(儿童,路径));
r、 push({name,id,path});
返回r;
}, [])
}

log(平面(树))
您可以使用
reduce
方法并创建递归函数来完成此操作

var-tree=[{“name”:“Firm”,“id”:1,“children”:[{“name”:“veniam”,“id”:2},{“name”:“officia”,“id”:3},{“name”:“ullamco”,“id”:4},{“name”:“duis”,“id”:5,“children”:[{“name”:“aliquip”,“id”:6,“children”:[{“name”:“culpa”,“id”:7},{“name”:“qui”,“id”:8},{“name”:“cillum”,“id”:“id”:9},{“name”:“duis”,“id”:“aliquip”,“ullamco”,“id],”10}]
函数平面(数据,上一个=[]){
返回数据.reduce((r,{id,name,children})=>{
let path=prev.concat(id)
如果(儿童)右推(…平(儿童,路径));
r、 push({name,id,path});
返回r;
}, [])
}
console.log(平面(树))
var-tree=[{name:“Firm”,id:1,children:[{name:“veniam”,id:2},{name:“officia”,id:3},{name:“ullamco”,id:4},{name:“duis”,id:5,children:[{name:“aliquip”,id:6,children:[{name:“culpa”,id:7},{name:“qui”,id:8},{name:“cillum”,id:9}]},{name:“ullamco”,id:10}];
函数展平(节点,路径=[],数组=[])){
常量{id,name}=node
const newPath=[…路径,id]
const children=node.children | |[]
push({id,name,path:newPath})
children.forEach(child=>{
展平(子级、新路径、数组)
})
返回数组
}
console.log(展平(树[0]))
var-tree=[{name:“Firm”,id:1,children:[{name:“veniam”,id:2},{name:“officia”,id:3},{name:“ullamco”,id:4},{name:“duis”,id:5,children:[{name:“aliquip”,id:6,children:[{name:“culpa”,id:7},{name:“qui”,id:8},{name:“cillum”,id:9}]},{name:“ullamco”,id:10}];
函数展平(节点,路径=[],数组=[])){
常量{id,name}=node
const newPath=[…路径,id]
const children=node.children | |[]
push({id,name,path:newPath})
children.forEach(child=>{
展平(子级、新路径、数组)
})
返回数组
}

console.log(展平(树[0]))
到目前为止您尝试了什么?到目前为止您尝试了什么?