Javascript 在Node.js中使用fs.readdir()列出文件时出现问题

Javascript 在Node.js中使用fs.readdir()列出文件时出现问题,javascript,node.js,asynchronous,callback,Javascript,Node.js,Asynchronous,Callback,我正在努力完成“”研讨会,但练习5遇到了问题。它要求您创建一个程序,打印给定目录中的文件列表,并按文件扩展名进行过滤。 我传入了目录files,其中包含各种JavaScript、Ruby和纯文本文件。它应该是console.log()每个扩展名为.js的文件 var fs = require('fs'); function indexDirectory(directory) { fs.readdir(directory, function(err, files) { for (va

我正在努力完成“”研讨会,但练习5遇到了问题。它要求您
创建一个程序,打印给定目录中的文件列表,并按文件扩展名进行过滤。

我传入了目录
files
,其中包含各种JavaScript、Ruby和纯文本文件。它应该是
console.log()
每个扩展名为
.js
的文件

var fs = require('fs');

function indexDirectory(directory) {
  fs.readdir(directory, function(err, files) {
    for (var i in files) {
      if (i.indexOf('.js') != -1) {
        console.log(files[i]);
      }
    }
  });
}

indexDirectory('files');

当我使用
node program.js
运行当前代码时,它不会输出任何内容。我是否遗漏了一些异步原则?我是否错误地使用回调?任何帮助都将不胜感激:)

文件
是数组,您应该使用
forEach
而不是
for。。在

var fs = require('fs');

function indexDirectory(directory) {
  fs.readdir(directory, function(err, files) {
    files.forEach(function (file) {
      if (file.indexOf('.js') != -1) {
        console.log(file);
      }
    });  
  });
}

indexDirectory('files');

此代码的另一个问题是,它还将打印扩展名为“.json”的文件。因此,您应该使用正则表达式,而不是indexOf。大概是这样的:

var matches = new RegExp(".js$").test(files[i]);
if (matches) {
   console.log(files[i]);
}

A
for in
循环迭代键,而不是值;不要在阵列上使用它
files.forEach(函数(i){…})
。另请参见.var i=0,file;i|
files.forEach(函数(文件){})
||
files.filter(函数(文件){returnfile_IS_JS;})@minitech谢谢!这是有道理的