for(i in array) 更新了吗?

Does the for(i in array) update?

好的,我有这个代码

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 的当前内容?

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++
}