gpt4 book ai didi

Javascript 递归添加到正确的位置

转载 作者:行者123 更新时间:2023-11-28 20:20:36 25 4
gpt4 key购买 nike

我无法将我的 add_child 函数推送到正确的位置。这是因为我的大脑在递归方面有问题。任何好心人都可以帮我弄清楚我需要做什么吗?

我相信我需要跟踪全局数组的深度,然后添加子项,例如 self.data[key][i].push({...}); 但是我似乎无法正确理解。

这是我的 jsFiddle

否则,我调用该函数来添加一些节点:

var m = new Map();
m.add(1);
m.add(2);
m.add(3);
m.add(4, 3);
m.add(5, 3);
m.add(6, 5);
m.add(7, 5);

console.log(m.data)

我正在尝试生成的示例:

  [
{
node_id: 0,
children: null
},
{
node_id: 1,
children: [
{
node_id: 2
children: null
},
{
node_id: 3
children: [

}
]
},
]

这是我的函数调用者:

var Map = function() {

var self = this;
this.data = [];

this.add = function(node_id, parent_id) {

if (typeof parent_id == 'number') {
self.add_child(node_id, parent_id, self.data);
return;
}

self.data.push({
'node_id': node_id,
'children': []
});

return true;
}

this.add_child = function(node_id, needle, haystack) {

for (var key in haystack)
{
if (haystack[key].children.length != 0)
{
self.add_child(node_id, needle, haystack[key].children);
}
else
{
if (haystack[key].node_id == needle)
{
//console.log("Searching for needle: " + needle)
//console.log("Found it in: " + key)

//console.log("The Actual Data:")
//console.log(self.data[key]);

self.data[key].children.push({
'node_id': node_id,
'children': []
});
break;
}
}
}
}

};

最佳答案

如果您删除 else 条件,它应该可以解决问题,而不是世界上最有效的事情,因为您将遍历树的大部分内容,这样的事情最好使用二叉搜索树来完成,例如红黑树

http://jsfiddle.net/vhqxk/

        for (var key in haystack)
{
if (haystack[key].children.length != 0)
{
self.add_child(node_id, needle, haystack[key].children);
}

if (haystack[key].node_id == needle)
{
haystack[key].children.push({
'node_id': node_id,
'children': []
});
break;
}
}

关于Javascript 递归添加到正确的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com