我试图获取特定人物的后代列表。以下是我到目前为止:
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返回一个人物对象
感谢任何帮助/建议
答案 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);
}, []);
}
谢谢大家的帮助