nodeschool learnyounode node.js module FILTER LS exercise

后端 未结 8 1289
面向向阳花
面向向阳花 2021-02-10 05:38

Below is the exercise 5 of nodeschool learnyounode module

Create a program that prints a list of files in a given directory, filtered by he extension of the files. You w

相关标签:
8条回答
  • 2021-02-10 06:04

    The solution given uses the path module from Node JS package. The solution below doesn't use path, instead relies on simple deconstruction of given filename and using the parts needed.

    -Import fs module

        var fs = require('fs');
    

    -Extract the path and ext name required from cmd line

        let filePath = process.argv[2];
        let extName = process.argv[3];
    

    -Use (readdir) method to read the contents of a directory. The names of files inside the directory will be returned in the form of an array.

        fs.readdir(filePath, 'utf-8', function(err, data) {
          if (err) throw err;
    
          data.forEach(element => {
    

    -Take each element and split it into filename and extension name

          let temp = element.split('.');
          let tempSplit = temp[1];
          if(tempSplit === extName) {
            console.log(temp[0] + '.' + temp[1]);
          }
        });
    

    Whole code for reference:

        var fs = require('fs');
    
        let filePath = process.argv[2];
        let extName = process.argv[3];
    
        fs.readdir(filePath, 'utf-8', function(err, data) {
          if (err) throw err;
    
          data.forEach(element => {
          let temp = element.split('.');
          let tempSplit = temp[1];
          if(tempSplit === extName) {
            console.log(temp[0] + '.' + temp[1]);
          }
        });
    
    0 讨论(0)
  • 2021-02-10 06:04

    The only thing missing in your code is the concatenation of '.' before the file extension type.

    var extension = '.'+ process.argv[3];

    You can then do the comparison and printing.

    0 讨论(0)
  • 2021-02-10 06:08

    You can try this code to solve this exercise :

    var fs = require('fs');
        function endsWith(str, suffix) {
            var s = str.slice(str.length - suffix.length - 1);
            if (s == "." + suffix)
                return true;
            else
                return false;
    };
    
    
    fs.readdir(process.argv[2], function (err, list) {
        if (process.argv[3]) {
            for (var i = 0; i < list.length; i++) {
                if (endsWith(list[i], process.argv[3]))
                    console.log(list[i]);
            }
        }
    });
    
    0 讨论(0)
  • 2021-02-10 06:11

    Here's the official solution:

    var fs = require('fs')
    var path = require('path')
    
    fs.readdir(process.argv[2], function (err, list) {
      list.forEach(function (file) {
        if (path.extname(file) === '.' + process.argv[3])
          console.log(file)
      })
    })
    
    0 讨论(0)
  • 2021-02-10 06:14

    Heres what I came up with, if you want other solutions to problem:

    var fs = require('fs');
    var path = process.argv[2]; //first argument
    var extension = process.argv[3]; //second argument
    var re = new RegExp("."+extension, "g"); //a regexp that matches every string that begins with a dot and is followed by the extension, i.e. .txt
    
    fs.readdir(path, function callback(err, list){ //read the directory
      if (!err) { //if no errors occur run next funtion
        list.forEach(function(val) { //take the list and check every value with the statement below
          if(re.test(val)) { //if the .test() rexexp-function does not match it will return a false, if it does it will return true
            console.log(val); //if it matches console log the value
          }
        });
      }
    });
    
    0 讨论(0)
  • 2021-02-10 06:15

    Here is what I came up with:

    var fs = require('fs');
    var filePath = process.argv[2];
    var fileType = '.' + process.argv[3];
    
    fs.readdir(filePath, function(err, list) {
    for(var i=0; i<list.length; i++){
        if (list[i].match(fileType)) {
            console.log(list[i]);
        }
    }
    });
    
    0 讨论(0)
提交回复
热议问题