Created
November 12, 2018 18:41
-
-
Save michalklim/5d854acb883446f84677674287fa68a7 to your computer and use it in GitHub Desktop.
Recursively search for files in directories
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Given collection like: | |
``` | |
const fileData = { | |
dir : 'app', | |
files : [ | |
'index.html', | |
{ | |
dir : 'js', | |
files: [ | |
'main.js', | |
'app.js', | |
'misc.js', | |
{ | |
dir : 'vendor', | |
files : [ | |
'jquery.js', | |
'underscore.js' | |
] | |
} | |
] | |
}, | |
{ | |
dir : 'css', | |
files : [ | |
'reset.css', | |
'main.css' | |
] | |
} | |
] | |
}; | |
``` | |
return list of all files or files in given directory | |
*/ | |
const searchFiles = (data, dirName) => { | |
const isString = value => typeof value === 'string'; | |
const generateListInDir = data => { | |
return data.files.reduce((filesList, file) => { | |
return isString(file) | |
? [...filesList, file] | |
: [...filesList, ...generateListInDir(file)]; | |
}, []); | |
}; | |
if (dirName) { | |
return dirName === data.dir | |
? generateListInDir(data) | |
: data.files | |
.filter(fileName => !isString(fileName)) | |
.reduce((branchFiles, branch) => { | |
return [...branchFiles, ...this.listFiles(branch, dirName)]; | |
}, []); | |
} else { | |
return generateListInDir(data); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment