尝试从类似json树的结构JavaScript递归创建结果数组

时间:2016-09-22 21:44:30

标签: javascript recursion data-structures

我试图获取特定人物的后代列表。以下是我到目前为止:

function getDescendants(id, descendants){
    children = getChildren(id);
    if(children){
        for (var child in children) {
           if(children.hasOwnProperty(child)){
               descendants.push(getDescendants(children[child].id, descendants));
           }
        }
    }
    return getPersonById(id);
}

这一直有效,直到它返回初始调用并忘记了子数组。

getChildren返回子对象的数组 getPersonById返回一个人物对象

感谢任何帮助/建议

2 个答案:

答案 0 :(得分:0)

function getDescendants(id, descendants, originalChildren ){
    children = getChildren(id);
    if(children){
        var originalChildren = originalChildren || children;
        for (var child in children) {
           if(children.hasOwnProperty(child)){
               descendants.push(getDescendants(children[child].id, descendants, originalChildren ));
           }
        }
    }
    return getPersonById(id);
}

当您第一次拨打getDescendants通过null或在第三个广告位中传递任何内容时。如果它为null,则它会将children的值存储在变量中,否则每次存储originalChildren并且您将继续传递children的第一个实例1}}通过你的功能。

答案 1 :(得分:0)

在咨询了一些同事和大量的脑痛之后,这就是我们想出来的。

let getDescendants = (parentID, people) => {
    return people.filter((el)=>{
        return el.parents.indexOf(parentID) > -1;
    }).map((kid)=>{
        return [...getDescendants(kid.id, people), kid.id ];
    }).reduce((a, b) => {
        return a.concat(b);
    }, []);
}

谢谢大家的帮助