2016-10-06 50 views
-2

好了,我有這樣的代碼for(我在數組中)更新?

var cwd = __dirname; 
var files = fs.readdirSync(__dirname); 
for(var i in files){ 
    if(fs.lstatSync(files[i]).isDirectory(path.join(cwd, files[i]))){ 
     var cur = fs.readdirSync(path.join(cwd, files[i])); 
     for(var j in cur){ 
      files.push(path.join(files[i], cur[j])); 
     } 
    } 
} 
console.log(files); 

此代碼檢查的files[i]路徑是目錄,如果是這樣,在變量cur獲取目錄,並將其存儲的內容。然後解析cur,並將其內容添加到files。但是,當它記錄日誌時,我正在獲取目錄files。這是因爲for循環僅在循環開始時取files的內容?有沒有辦法讓循環更新到當前內容files

回答

1

for in僅取得進入循環前存在的索引。可以使用while代替。

var i=0 
while (files[i]){ 
    if(fs.lstatSync(files[i]).isDirectory(path.join(cwd, files[i]))){ 
     var cur = fs.readdirSync(path.join(cwd, files[i])); 
     for(var j in cur){ 
      files.push(path.join(files[i], cur[j])); 
     } 
    } 
    i++ 
}