Рекурсивная функция

 
0
 
JavaScript
ava
JAYBE | 22.09.2011, 11:17
Добрый день!
Имеются массив объеков вида:
Obj1.name
Obj1.child[Obj1: name, child[]}, Obj2{name, child[]}]
Obj2.name
Obj2.child[]
Подскажите, как обойти массив, проходя по каждому элементу и выводя name?
Тоесть должно быть так:
Obj1.name
Obj1.child.Obj1.name
Obj1.child.Obj2.name
Obj2.name


function readObj (mass) {
for (i = 0; i < mass.length; i ++) {
alert(i.name)
if ((mass[i].HasProperty('child')) && (ArrayCount(mass[i].child)>0)) {
readObj (mass[i].child);
}
}
}

Но витоге при обходе функция уходит вглубь первого элемента.
Тоесть как только в обхекте есть элемент, она идёт по нему, но следующий родительский уже не выводит.
Kommentare (5)
ava
нуп | 22.09.2011, 10:35 #

var data = [
{ name : 'name1', child : [ { name : 'name11', child : [] }, { name : 'name2', child : []} ] },
{ name : 'name2', child : [] },
{name : 'name3', child : [ {name : 'nam31', child : []} ] }
];

function recursive(elem) {
var i;
console.log(elem.name);
for(i = 0; i < elem.child.length; i += 1) {
recursive(elem.child[i]);
}
}

//вызов
var i;
for(i = 0; i < data.length; i += 1) {
recursive(data[i]);
}

Самое главное это определение локальной переменной в функции через var. Скорей всего из-за неё и неработало
ava
JAYBE | 22.09.2011, 14:20 #
Большое спасибо smile
Я создаю дерево файлов и папок. Папки имеют свойство child, а файлы нет.
Если рекурсия натыкается на файл, то дальше не обходит
.

var data = [
{ name : 'name1', child : [ { name : 'name11', child : [] }, { name : 'name2', child : []} ] },
{ name : 'name2'},
{name : 'name3', child : [ {name : 'nam31', child : []} ] }
];



Т.е. при вышеперчисленных оъектах обход заканчивается на переменной data[1], она же name2.
Можно это как-то исправить без добавления файлам свойства child?
ava
нуп | 22.09.2011, 14:23 #
Приведите пример с массивом
ava
JAYBE | 22.09.2011, 16:46 #
Вот код:

var data = [
{ name : 'name1', child : [ { name : 'name11', child : [] }, { name : 'name2', child : []} ] },
{ name : 'name2'},
{name : 'name3', child : [ {name : 'nam31', child : []} ] }
];

function recursive(elem) {
var y;
for(y = 0; y < elem.child.length; y += 1) {
recursive(elem.child[y]);
}
}

//вызов
var i;
for(i = 0; i < data.length; i += 1) {
recursive(data[i]);
}

Обращаю внимание на строку 3: <<{ name : 'name2'},>>
Результатов будет вывод:
    name1
    name11
    name12
    name2
Как можно исправить ситуацию без добавления ко 2-ому элемента свойства child?
ava
нуп | 22.09.2011, 17:21 #
Проверить на существование массива child smile if(elem.child) { ... }
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  JAYBE   нуп
Ähnliche
advanced
Absenden