javascript程序,打印当前目录中具有请求的文件扩展名且包含特定字符串的所有文件
行“node jsfile.js” 应导致查找扩展名为.txt且包含字符串“some”的所有文件 我尝试过这个方法,效果很好,但是有一个小错误-如果mia.txt和mama.txt文件有字符串“some”,它会打印mia.txt,mia.txt,而不是打印mama.txt,mia.txt 脚本代码: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) {
/* 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++
}
})
})
这就是为什么你在回答问题时没有对根本问题作任何解释,而不是投票以一份有适当解释的副本作为结束。。。