Finding most similar file in json tree

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"

2 Likes