在javascript中递归树时收集值

在javascript中递归树时收集值,javascript,algorithm,recursion,search,tree,Javascript,Algorithm,Recursion,Search,Tree,我理解基本的递归,但这个问题已经解决了。我在数据库中设置了一个树结构,其中每个节点(行)都有一个id和父id 我需要一个函数,该函数可以运行并在回调中返回给定id的特定节点的所有子代的数组 我已经能够组合一个可以输出所有值的函数,但是我不知道如何捕获它们并在回调中返回它们。我知道基本情况设置不正确,因为我甚至不确定它应该是什么 我将感谢任何帮助!谢谢大家! //我的“数据库” 变量节点\u集合=[ {id:“id1”,name:“name1”,parentid:“.”, {id:“id2”,n

我理解基本的递归,但这个问题已经解决了。我在数据库中设置了一个树结构,其中每个节点(行)都有一个id和父id

我需要一个函数,该函数可以运行并在回调中返回给定id的特定节点的所有子代的数组

我已经能够组合一个可以输出所有值的函数,但是我不知道如何捕获它们并在回调中返回它们。我知道基本情况设置不正确,因为我甚至不确定它应该是什么

我将感谢任何帮助!谢谢大家!

//我的“数据库”
变量节点\u集合=[
{id:“id1”,name:“name1”,parentid:“.”,
{id:“id2”,name:“name2”,parentid:“id1”},
{id:“id3”,name:“name3”,parentid:“id1”},
{id:“id4”,name:“name4”,parentid:“id2”},
{id:“id5”,name:“name5”,parentid:“id3”},
{id:“id6”,name:“name6”,parentid:“id3”},
{id:“id7”,name:“name7”,parentid:“id5”},
{id:“id8”,name:“name8”,parentid:“id7”},
{id:“id9”,name:“name9”,parentid:“id7”},
{id:“id10”,name:“name10”,parentid:“id9”},
];
//这不是一个真正的函数,它只是执行真正的getChildren在连接到我的数据库时所执行的函数!!!
函数getChildren(parentid,回调){
var children=[];
对于(var i=0;i我建议:

let obj = [
      {id:"id1",name:"name1",parentid:"."},
            {id:"id2",name:"name2",parentid:"id1"},
            {id:"id3",name:"name3",parentid:"id1"},
            {id:"id4",name:"name4",parentid:"id2"},
            {id:"id5",name:"name5",parentid:"id3"},
]

function getChilds(obj, parent_id, callback) {

   if(obj.length === 0) return;

   else if (typeof callback !== 'function'){
    throw new Error("The callback must be a function ");
    return;
   }

   let childs = obj.filter(function (c) {return c.parentid == parent_id })

   if(childs.length > 0 ){
    childs = childs.map(function (c) {return c.id})   
   }

   callback(childs)

}
// Test
getChilds(obj, "id1", function (childs) {console.log(childs)})

这里有一个简单的方法。我们创建一个结果对象和一个中间递归函数,将所有子体作为包装器。当递归完成时,我们返回现在包含所有子代的结果

JsvaScript代码:

//我的“数据库”
变量节点\u集合=[
{id:“id1”,name:“name1”,parentid:“.”,
{id:“id2”,name:“name2”,parentid:“id1”},
{id:“id3”,name:“name3”,parentid:“id1”},
{id:“id4”,name:“name4”,parentid:“id2”},
{id:“id5”,name:“name5”,parentid:“id3”},
{id:“id6”,name:“name6”,parentid:“id3”},
{id:“id7”,name:“name7”,parentid:“id5”},
{id:“id8”,name:“name8”,parentid:“id7”},
{id:“id9”,name:“name9”,parentid:“id7”},
{id:“id10”,name:“name10”,parentid:“id9”},
];
//这不是一个真正的函数,它只是执行真正的getChildren在连接到我的数据库时所执行的函数!!!
函数getChildren(parentid,回调){
var children=[];
对于(var i=0;i});
你也能把数据库发送的数组放进去吗?@Aboubacarouatara是的,我添加了一个例子。你能修改一下你的例子吗?就像你说的,“打印”出所有的值吗?“代码现在在本地工作@这适用于单层树,但这里没有递归。函数无法找到节点4和5。通过简单地查询数据库中parentid=xc的所有对象,同样可以实现这一点。您可以发布一个包含多个节点的复杂表吗?是的,我发布了一个具有更深层树结构的修订示例。