2015-08-19 159 views
0

我正在努力尋找一個特定的子目錄的遞歸JavaScript函數。這是我的代碼:Javascript遞歸返回undefined

function navigateToParent() { 
    var parentFullPath = parentDirectory(); // gets the full Path String 
    if (parentFullPath != null) { 
     var parent = getDirectoryByName(parentFullPath, rootDirectory); 
     // set the parent directory object as the current one 
     currentDirectory(parent); 
    } 
} 

function getDirectoryByName(fullName, myDirectory) { 
    if (myDirectory.fullName == fullName) { 
     return myDirectory; 
    } else { 
     var subs = myDirectory.subDirectories; 
     for (i = 0; i < subs.length; i++) { 
      return getDirectoryByName(fullName,subs[i]); 
     } 
    } 
} 

每個目錄對象都有屬性fullName(串),subDirectories(目錄的陣列)和files(文件的陣列)。我的目標是獲得正確的目錄對象,它的全名匹配。

我知道,我必須以某種方式打破for循環,但我不知道如何完全做到這一點。

+0

你能提供的目錄對象的例子嗎? – Andy

+2

在你的for循環中,如果'getDirectoryByName'返回一個結果,你真的只想返回'',否則你將永遠不會檢查其他的孩子 – CodingIntrigue

+0

getDirectoryByName'不是所有的執行路徑都返回一個值,因爲它不會檢查除第一個子目錄以外的任何東西。 – Igor

回答

0

我得太多來到這個解決方案的邏輯後(似乎工作):

function getDirectoryByName(fullName, myDirectory) { 
    if (myDirectory.fullName == fullName) { 
     return myDirectory; 
    } else { 
     var subs = myDirectory.subDirectories; 
     for (i = 0; i < subs.length; i++) { 
      var match = getDirectoryByName(fullName, subs[i]); 
      if (typeof match !== "undefined"){ 
       return match; 
      } 
     } 
    } 
}