Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не работает рекурсивная функция (http://www.flasher.ru/forum/showthread.php?t=112992)

A.E.M. 15.06.2008 21:17

Не работает рекурсивная функция
 
В книге Мука предлагают написать рекурсивную функцию для обработки любого количества вложенных массивов внутри массива... Передавать ей два параметра - сам массив и разделитель, который ставить между элементами. (например myFunc(myArray," || ")). Так вот, нужно чтобы, не смотря на то, сколько вложенных массивов в массиве myArray и сколько вложенных массивов внутри вложенных, возвращалась строка с перечислением всех элементов, между элементами должен ставится разделитель " || ".

Вот моя функция, не могу понять почему не работает...

Код:

function vivodMassiv(array, delimiter) {
        var strEnd = "";
        for (i=0; i<array.length; i++) {
                if (array[i] instanceof Array) {
                        strEnd += vivodMassiv(array[i], delimiter, 1);
                } else {
                        strEnd += array[i]+delimiter;
                }
        }
        return strEnd;
}


MrPoma 15.06.2008 21:34

Код:

function vivodMassiv(array:Array, delimiter:String):String{
        var strEnd:String = '';
        for (var i:Number = 0; i < array.length; i++) {
                if (array[i] instanceof Array) {
                        strEnd += vivodMassiv(array[i], delimiter);
                } else {
                        strEnd += array[i] + delimiter;
                }
        }
        return strEnd;
}

var s:String = vivodMassiv([0, 1, [2, [3, 4], 5]], '-');
trace(s)


A.E.M. 15.06.2008 22:40

Цитата:

Сообщение от MrPoma (Сообщение 745750)
Код:

function vivodMassiv(array:Array, delimiter:String):String{
        var strEnd:String = '';
        for (var i:Number = 0; i < array.length; i++) {
                if (array[i] instanceof Array) {
                        strEnd += vivodMassiv(array[i], delimiter);
                } else {
                        strEnd += array[i] + delimiter;
                }
        }
        return strEnd;
}

var s:String = vivodMassiv([0, 1, [2, [3, 4], 5]], '-');
trace(s)


Спасибо Вам огромное! Только вот поясните все же если не сложно... Ведь у меня все так же было написано... дело в том, что не указаны явно типы???

iNils 15.06.2008 23:25

У вас переменная i была не локальная, поэтому в каждом вызове vivodMassiv цикл начинался не с 0, а продолжал использовать сатрое значение i

A.E.M. 15.06.2008 23:49

спасибо!


Часовой пояс GMT +4, время: 19:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.