我不能讓我的add_child
函數推入正確的位置。這是因爲我的大腦有遞歸問題。任何善良的靈魂都可以幫助我弄清楚我需要做什麼?Javascript遞歸添加到正確的位置
我相信我需要跟蹤全局數組的深度,然後添加像self.data[key][i].push({...});
這樣的孩子,但我似乎無法把它弄明白。
這是我jsFiddle
否則,這裏是我調用該函數添加一些節點:
[
{
node_id: 0,
children: null
},
{
node_id: 1,
children: [
{
node_id: 2
children: null
},
{
node_id: 3
children: [
}
]
},
]
這樣的:我想要製作
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)
例我的功能呼叫者:
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;
}
}
}
}
};
注意,在你的終端的情況下('如果(大海撈針[關鍵] .node_id ==針)'),您要添加到'self.data [關鍵]'代替'乾草堆[關鍵]'。 –
在JavaScript中,不建議使用'for(var x in ...)'循環遍歷數組。更喜歡使用[Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)或標準的'for(var i = 0; i