Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript程序,打印当前目录中具有请求的文件扩展名且包含特定字符串的所有文件_Javascript_Node.js - Fatal编程技术网

javascript程序,打印当前目录中具有请求的文件扩展名且包含特定字符串的所有文件

javascript程序,打印当前目录中具有请求的文件扩展名且包含特定字符串的所有文件,javascript,node.js,Javascript,Node.js,行“node jsfile.js” 应导致查找扩展名为.txt且包含字符串“some”的所有文件 我尝试过这个方法,效果很好,但是有一个小错误-如果mia.txt和mama.txt文件有字符串“some”,它会打印mia.txt,mia.txt,而不是打印mama.txt,mia.txt 脚本代码: /* Sending error if command line arguments is not exactly 4 */ if (process.argv.length != 4) {

行“node jsfile.js” 应导致查找扩展名为.txt且包含字符串“some”的所有文件

我尝试过这个方法,效果很好,但是有一个小错误-如果mia.txt和mama.txt文件有字符串“some”,它会打印mia.txt,mia.txt,而不是打印mama.txt,mia.txt

脚本代码:

/* Sending error if command line arguments is not exactly 4 */

if (process.argv.length != 4) {
    console.log("USAGE: node " + process.argv[1] + " [EXT ] [TEXT].");
    /* TODO:error message and quit program*/
}

/* Declarations: */

var fs = require('fs');
var path = require('path');
var dirPath = path.resolve(__dirname);
var files = fs.readdirSync(dirPath);
var requestedExtension = "." + process.argv[2];
var requestedString = process.argv[3];
var amountOfMatchingFiles = 0;
var resultListOfMatchingFiles = "";
var extensionFilter = [];

/* Retrieving all files with the requested file extension filter: */

for(var i in files) {
    if(path.extname(files[i]) === requestedExtension) {
        extensionFilter.push(files[i]);
    }
}
console.log("after file extension filter:" + extensionFilter);

/* Retrieving all files with the requested file extension filter and requested string: */

for(var i in extensionFilter) {
    var fullFilePath = dirPath + "\\" + extensionFilter[i];
    fs.readFile(fullFilePath, function (err, data) {
            if (err) throw err;
            if(data.indexOf(process.argv[3]) >= 0) {
            console.log(extensionFilter[i]);
            amountOfMatchingFiles++;
            }
    });
}


/*
console.log(":::"+amountOfMatchingFiles);
if (amountOfMatchingFiles === 0)
{    
    console.log("No File Was Found" + amountOfMatchingFiles);
}*/

这是一个典型的JavaScript问题,它位于最后一个for循环中:

for (var i in extensionFilter) {
  var fullFilePath = dirPath + "\\" + extensionFilter[i];
  fs.readFile(fullFilePath, function (err, data) {
    if (err) throw err;
    if (data.indexOf(process.argv[3]) >= 0) {
      // HERE extensionFilter[i] is "mia.txt" since i has reached
      // it's last value
      console.log(extensionFilter[i]);
      amountOfMatchingFiles++;
    }
  });
}
改用
.forEach()

extensionFilter.forEach(function (filter) {
  var fullFilePath = dirPath + "\\" + filter;
  fs.readFile(fullFilePath, function (err, data) {
    if (err) throw err
    if (data.indexOf(process.argv[3]) >= 0) {
      console.log(filter);
      amountOfMatchingFiles++
    }
  })
})

这就是为什么你在回答问题时没有对根本问题作任何解释,而不是投票以一份有适当解释的副本作为结束。。。