/ / जावास्क्रिप्ट रिकर्सिवली सही जगह पर जोड़ना - जावास्क्रिप्ट, रिकर्सन

जावास्क्रिप्ट रिकर्सिवली सही जगह पर जोड़ना - जावास्क्रिप्ट, रिकर्सन

मैं अपना नहीं ले सकता 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;
}
}
}
}

};

उत्तर:

जवाब के लिए 2 № 1

यदि आप अन्य शर्त को हटाते हैं तो इसे करना चाहिएचाल, दुनिया में सबसे कुशल चीज नहीं है क्योंकि आप "पेड़ के अधिकांश भाग में जा रहे हैं, ऐसा कुछ बाइनरी सर्च पेड़ जैसे लाल काला पेड़ के साथ किया जाता है

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;
}
}

उत्तर № 2 के लिए 1

कुछ त्रुटियां थीं, यहां कोड काम कर रहा है, बस add_child फ़ंक्शन

this.add_child = function(node_id, needle, haystack) {
if (!haystack) { return; }
for (var key in haystack) {
// you need to check if haystack[key].children is not undefined
if (haystack[key].children && haystack[key].children.length != 0) {
self.add_child(node_id, needle, haystack[key].children);
} else {
if (haystack[key].node_id == needle) {
// initialize children if null
if (!haystack[key].children) {
haystack[key].children = [];
}
// append to haystack
haystack[key].children.push({
"node_id": node_id,
"children": []
});
break;
}
}
}
};

आपके डेटा के साथ परीक्षण किया गया:

var data = [
{
node_id: 0,
children: null
},
{
node_id: 1,
children: [
{
node_id: 2,
children: null
},
{
node_id: 3,
children: []

}
]
},
];

var map = new Map();
map.add_child(10, 0, data);
console.log(JSON.stringify(data));