यह waaay आसान होगा अगर किसी भी तरह EL1-EL4
var data = []
data[0] = {name:'ronaldo', team: 'europe/spain/realmadrid'}
data[1] = {name:'messi', team: 'europe/spain/barcelona'}
data[2] = {name:'gerald', team: 'europe/england/liverpool'}
data[3] = {name:'unknown english', team: 'europe/england'}
इस तरह से आप प्रोसेस करते समय कम से कम लूप कर सकते हैं।
यह जानना भी उपयोगी होगा कि आपको JSON वृक्ष के रूप में संग्रहीत करने की आवश्यकता क्यों है। मेरा मतलब है, सभी नोड्स एक ही तरह की चीज नहीं हैं, है ना? पहला स्तर महाद्वीप है, फिर देश, फिर टीम का नाम, और पत्तियां व्यक्तिगत फुटबॉल खिलाड़ी हैं। यह एक काफी भ्रमित डेटा संरचना है और मुझे यकीन नहीं है कि यह कैसे उपयोगी होगा। किसी भी तरह से, इसे पहले क्षेत्रबद्ध संरचना में अनुवाद करने के लिए और फिर पेड़ उत्पन्न करने के लिए और अधिक उपयोगी हो सकता है।
संपादित करें: ठीक है, इसलिए मैंने इसके बारे में कुछ और सोचा और मुझे लगता है कि ऐसा कुछ ऐसा हो सकता है।
var data = [];
data[0] = {name:'ronaldo', team: 'europe/spain/realmadrid'};
data[1] = {name:'messi', team: 'europe/spain/barcelona'};
data[2] = {name:'gerald', team: 'europe/england/liverpool'};
data[3] = {name:'unknown english', team: 'europe/england'};
var tree = {};
function fillTree(name,steps) {
current = null;
for (var y = 0; y < steps.length; y++) {
if (y==0) {
if (!tree.children||typeof tree.children == 'undefined'){
tree = { text: steps[y], leaf: false, children: [] };
}
current = tree.children;
} else {
current.push({ text: steps[y], leaf: false, children: [] })
current = current[current.length - 1].children;
}
}
current.push({ text: name, leaf: true })
}
for (x=0; x < data.length; x++) {
steps =data[x].team.split('/');
fillTree(data[x].name,steps)
}
यह एक जावास्क्रिप्ट ऑब्जेक्ट बनाता है। मैं इसे JSON में बदलने के लिए आपको छोड़ देता हूं।
अद्यतन:
हाँ, मुझे लगता है कि पुरानी स्क्रिप्ट हमेशा होता है दूसरे स्तर भले ही वह पहले से ही अस्तित्व में है पर में एक रिकॉर्ड डाल दिया।
var tree = {};
function fillTree(name,steps) {
var current = null,
existing = null,
i = 0;
for (var y = 0; y < steps.length; y++) {
if (y==0) {
if (!tree.children||typeof tree.children == 'undefined'){
tree = { text: steps[y], leaf: false, children: [] };
}
current = tree.children;
} else {
existing = null;
for (i=0; i < current.length; i++) {
if (current[i].text === steps[y]) {
existing = current[i];
break;
}
}
if (existing) {
current = existing.children;
} else {
current.push({ text: steps[y], leaf: false, children: [] });
current = current[current.length - 1].children;
}
}
}
current.push({ text: name, leaf: true })
}
JSON में इस वस्तु कन्वर्ट करने के लिए सबसे आसान तरीका है, जाहिरा तौर पर है, हालांकि जाहिरा तौर पर इस समान रूप से समर्थित नहीं है (see the JavaScript JSON Page) JSON.stringify(tree)
उपयोग करने के लिए है: इस नए बेहतर FillTree कार्य है।
धन्यवाद जॉर्डन, लेकिन यूरोप में केवल 2 बच्चे (स्पेन और इंग्लैंड) होना चाहिए – user275031
@Dementic धन्यवाद! यदि आपके पास एक अच्छा समाधान है, तो कृपया इसे पोस्ट करें। –
जो कोड मैंने लिखा है वह इनपुट लेता है और वास्तव में वांछित आउटपुट बनाता है। एकमात्र अंतर यह है कि यह एक जावास्क्रिप्ट संरचना के रूप में आउटपुट है, जिसे ओपी जेएसओएन में कनवर्ट करने के लिए स्वतंत्र है, जो भी वह चाहता है। यदि आप सोच रहे थे, किसी और के जवाब की अनियंत्रित रूप से आलोचना करना उनके लिए अपने किसी एक प्रश्न का उत्तर देने के लिए प्रेरित करने का एक शानदार तरीका नहीं है। –