Filtrowanie plików poprzez ich rozszerzenia

0

Cześć, jestem na początku swojej ścieżki z programowaniem w js. Przerabiam program szkoleniowy ze strony nodeschool.io. Aktualnie jestem na programie learnyounode (podejrzewam, że dość popularna strona do nauki) i mam prośbę o tzw code review. Męczę się z tym zadaniem od piątku i nie widać rezultatów.
Będę wdzięczny za okazaną pomoc

const fileList = (process.argv[2]);
function filtering(element, err) {
    if (err) throw ('error');

    return element.includes('.' + process.argv[3]);
}
var filtered = fileList.filter(filtering);
console.log(filtered);
1

Nie jestem JavaScriptowcem, ale proponuję zajrzeć do dokumentacji metody filter

0

Czym jest parametr err w Twojej funkcji filtering?

0

W zasadzie jest niepotrzebny, brałem to prosto z przykładu. Usunąłem go.

0

Ok, to wrzuć zaktualizowany kod :-)

0
const fileList = (process.argv[2]);
function checkedExtention(fileList) {
    return fileList.includes('.' + process.argv[3]);
}
var filtered = fileList.filter(checkedExtention);
console.log(filtered);

Zastanawiam się jak się za to zabrać.

0

Co to właściwie znaczy nie widać rezultatów?

0

Pracując z nodeschool.io wysyłam program do sprawdzenia poprzez learnyounode verify nazwa_programu.js i dostaję taki komunikat:
screenshot-20200629140442.png
Niby jest podpowiedź o asynchroniczności, ale wtedy mam wrażenie, że cały kod jest do napisania od nowa.

1

Ano widzisz, było wrzucić tego screena już na samym początku, a nie pisać nie widać rezultatów ;-)

.filter() to metoda, którą można wykonać na tablicy, podczas gdy fileList jest u Ciebie ciągiem znaków (stringiem).

Aby zamienić ciąg znaków na liczbę, możesz wykorzystać metodę split(), lecz - jako że nie widzę treści zadania - nie jestem w stanie powiedzieć czy to jest to, czego oczekuje się od aplikacji w zadaniu.

0

screenshot-20200629141000.png

0

Ok, gdzie zatem wczytujesz listę plików z katalogu?

0

Chyba zaczynam rozumieć, co chcesz mi przekazać:

const fs = require('fs')
const fileList = (process.argv[2]);
fs.readFile(fileList, function (data) {
    const array = data.toString()

    function checkedExtention(fileList) {
        return fileList.includes('.' + process.argv[3]);
    }
    var filtered = fileList.filter(checkedExtention);
    console.log(filtered);


1

Dla porównania, ja podszedłbym do tematu następująco:

const fs = require('fs');
const path = require('path');

const dirPath = process.argv[2];
const extension = '.' + process.argv[3];

fs.readdir(dirPath, function (err, files) {
    files = files.filter(function (file) {
        return path.extname(file) == extension;
    });

    console.log(files);
});
1

Dziękuję za rozwiązanie. Też na to sprawdziłem i uznałem, że to najgorsze co mogę zrobić, bo uważam że najwięcej zapamiętam, gdy rozwiązanie ułoży się jakoś w mojej głowie.

0

A możesz mi wytłumaczyć ten zapis?

 return path.extname(file) == extension;
    });
1

path.extname(file) zwraca rozszerzenie pliku (np. path.extname('cośtam.txt') zwraca '.txt'); zwracane rozszerzenie porównywane jest z tym, które użytkownik przekazał w argumencie.

0

Poproszę Cię jeszcze o zrewidowanie tego, czy dobrze zrozumiałem program.
Program wczytuje listę plików process.argv[2], po czym jest wykonywany argument files, który zwraca rozszerzenie plików i porównuje je z process.argv[3]. Na końcu wypisuje wynik.

1

wczytuje listę plików process.argv[2]

Program, z wykorzystaniem funkcji fs.readdir(), wczytuje listę plików z katalogu, którego ścieżka znajduje się w process.argv[2].

po czym jest wykonywany argument files, który zwraca rozszerzenie plików

Następnie, z wykorzystaniem funkcji path.extname() oraz .filter(), odfiltrowywane są te pliki, których rozszerzenia nie pasują do tego określonego w process.argv[3].

1 użytkowników online, w tym zalogowanych: 0, gości: 1