Ответ 1
Было бы легче, если бы как-то 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. Я имею в виду, что не все узлы - это то же самое, не так ли? Первый уровень - это континент, затем страна, потом название команды, а листья - отдельные футболисты. Это довольно запутанная структура данных, и я не уверен, как это было бы полезно. В любом случае, может быть более полезно сначала перевести его в полевую структуру, а затем сгенерировать дерево.
Edit: Хорошо, поэтому я подумал об этом немного больше, и я думаю, что возможно что-то подобное может сделать это.
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)
}
Это создает объект JavaScript. Я оставляю это для вас, чтобы преобразовать это в JSON.
Update:
Да, я вижу, что старый script всегда будет записывать запись на втором уровне, даже если он уже существует. Это новая улучшенная функция FillTree:
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, по-видимому, заключается в использовании JSON.stringify(tree)
, хотя, по-видимому, это не поддерживается равномерно (см. страницу JavaScript JSON).