2015-09-06 61 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

谢谢你。这完全回答了我的问题。 –