Skip to content

Instantly share code, notes, and snippets.

@michalklim
Created November 12, 2018 18:41
Show Gist options
  • Save michalklim/5d854acb883446f84677674287fa68a7 to your computer and use it in GitHub Desktop.
Save michalklim/5d854acb883446f84677674287fa68a7 to your computer and use it in GitHub Desktop.
Recursively search for files in directories
/*
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