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

謝謝你。這完全回答了我的問題。 –