I just shamelessly forked @markbrown4’s algo (hope that’s ok) and added that Levenshtein functionality… but if you want the direct parent to be more similar you’d probably have to do a full tree search.
var levenshtein = require('levenshtein');
var directories = {
"file1": {
"subFile": {
"moreSubFiles":{}
},
"subFile2": {}
}
};
var closest = function(directory, part) {
var shortest = Infinity,
match = null,
ls;
for (var i in directory) {
ls = new levenshtein(i, part);
if (ls.distance < shortest) {
shortest = ls.distance;
match = directory[i];
}
}
return match;
};
var find = function(path) {
var parts = path.split('/'),
directory = directories,
part;
for (var i in parts) {
part = parts[i];
directory = directory[part] || closest(directory, part);
if (!directory) return null;
}
return directory;
};
console.log(find('file1/subFilf')); // gets you to "moreSubFiles"