2015-09-06 2 views
0

Я пытаюсь составить список всех файлов внутри древовидной структуры. Я нашел следующий код, который я нашел в Интернете, который делает это, но выводит имена папок и файлов в журнал ошибок. (Я использую BetterLog для отправки этого файла в электронную таблицу.Я хотел бы, чтобы информация сохранялась в массиве при запуске функции, проблема в том, что функция является рекурсивной, и я не могу понять, как решить эту проблему.Передача массива из рекурсивной функции

function getChildFolders(parent) { 
Logger = BetterLog.useSpreadsheet('1nJ3fTFYQgwwXYik3LqAoX2M1KHj4lskrxyX0Y9p6ci8'); 

var childFolders = parent.getFolders(); 

while (childFolders.hasNext()) { 

var childFolder = childFolders.next(); 

Logger.log("Folder Name: " + childFolder.getName()); 
Logger.log("Folder URL: " + childFolder.getUrl()); 

var files = childFolder.getFiles(); 

while (files.hasNext()) { 

// Print list of files inside the folder 
    Logger.log(files.next().getName()); 
    } 

    // Recursive call for any sub-folders 
    getChildFolders(childFolder); 

}

}

ответ

1

Ну, просто передать массив в качестве параметра для функции, например:

function getChildFolders(parent,array) { 
    var childFolders = parent.getFolders(); 

    while (childFolders.hasNext()) { 

    var childFolder = childFolders.next(); 

    array.push("Folder Name: " + childFolder.getName()); 
    array.push("Folder URL: " + childFolder.getUrl()); 

    var files = childFolder.getFiles(); 

    while (files.hasNext()) { 

     // Print list of files inside the folder 
     array.push(files.next().getName()); 
    } 

    // Recursive call for any sub-folders 
    getChildFolders(childFolder, array); 
    } 

    return array; 
} 

function test() { 
    var array = getChildFolders(DriveApp.getRootFolder(), []); 
    Logger.log(array); 
} 
+0

Делает ли он и удерживает копию всего массива каждый раз, когда функция вызывается рекурсивно? –

+0

Нет, вам нужно создать массив и передать его функции, которая затем передает ее на рекурсивные вызовы. На протяжении всего исполнения есть только один массив. Нет копий или рекреационных массивов. –

+0

Спасибо. Это прекрасно отвечает на мой вопрос. –

Смежные вопросы