关于学习运动的问题5

时间:2016-11-13 16:05:35

标签: javascript node.js

大家好我试图解决来自nodeschool的练习,我从learnyounode开始,人们为初学者推荐了很多,练习题是:

# LEARN YOU THE NODE.JS FOR MUCH WIN!

## FILTERED LS (Exercise 5 of 13)

 Create a program that prints a list of files in a given directory,
 filtered by the extension of the files. You will be provided a directory
 name as the first argument to your program (e.g. '/path/to/dir/') and a
 file extension to filter by as the second argument.

 For example, if you get 'txt' as the second argument then you will need to
 filter the list to only files that end with .txt. Note that the second
 argument will not come prefixed with a '.'.

 Keep in mind that the first arguments of your program are not the first
 values of the process.argv array, as the first two values are reserved for
 system info by Node.

 The list of files should be printed to the console, one file per line. You
 must use asynchronous I/O.

─────────────────────────────────────────────────────────────────────────────


## HINTS

 The fs.readdir() method takes a pathname as its first argument and a
 callback as its second. The callback signature is:

    function callback (err, list) { /* ... */ }

 where list is an array of filename strings.

 Documentation on the fs module can be found by pointing your browser here:
 file://C:\Users\Filipe\AppData\Roaming\npm\node_modules\learnyounode\node_
 apidoc\fs.html

 You may also find node's path module helpful, particularly the extname
 method.

 Documentation on the path module can be found by pointing your browser
 here:
 file://C:\Users\Filipe\AppData\Roaming\npm\node_modules\learnyounode\node_
 apidoc\path.html

─────────────────────────────────────────────────────────────────────────────


  » To print these instructions again, run: learnyounode print

  » To execute your program in a test environment, run: learnyounode run

    program.js

  » To verify your program, run: learnyounode verify program.js

  » For help run: learnyounode help

我试图解决这个问题:

var fs = require('fs');

fs.readdir(process.argv[2],process.argv[3],function(err,list){
    for(var i = 0;i<list.length;i++)
    {
        var fileParts = list[i].split(".");
        if(fileParts[1] == process.argv[3]){
            console.log(list[i] + "\n");
        }
    }
});

为什么它不起作用,我不知道我做错了什么,如果有人可以给我一个提示来解决这个问题我很感激,因为网络上的解决方案有点奇怪。

1 个答案:

答案 0 :(得分:0)

嗯,我刚刚测试了你的代码,它实际上对我运行良好。验证已解决的退货。不确定你在经历什么。顺便说一句:至少进行一些错误处理。在我的解决方案下面:

const fs = require('fs');
const test = '.' + process.argv[3]

fs.readdir(process.argv[2], (err, data) => {
    if (err) { 
        console.error(err); 
    } else {
        data.filter(file => {
            if (file.substring(file.length - test.length) === test) {
                console.log(file)
            }
        })  
    }
});