Попытка создать простую строку поиска на основе ключевых слов в Javascript (шпагат)

#javascript #search #twine

Вопрос:

Я пытаюсь создать простую функцию поиска по ключевым словам в истории шпагата с помощью Javascript. В этом руководстве у меня есть кое-что функциональное, но я пытаюсь его немного изменить. Я бы хотел, чтобы поиск выводил все совпадения, а не только самое высокое или, по крайней мере, 5 самых высоких совпадений. Кто-нибудь может мне в этом помочь? К сожалению, я не очень хорошо знаком с Javascript, поэтому попытаться понять, что нужно изменить, а затем что изменить, было очень сложно.

 
window.SearchTerm = window.SearchTerm || function (h, descr, kw) {
    'use strict';
    
    if (this instanceof SearchTerm) {
        this.handle      = h;
        this.description = descr;
        this.keywords    = kw;
    } else {
        return new SearchTerm(h, descr, kw);
    }
};

SearchTerm.add = function (h, descr, kw) {
    termList.push(new SearchTerm(h, descr, kw));
};

SearchTerm.prototype = {
    
    compare : function (stringArray) {
        var term = this;
        var matches = (function () {
            var ret = 0;
            stringArray.forEach( function (str) {
                if (term.keywords.includes(str)) {
                        ret  ;
                }
            });
            return ret;
        }());
        
        return matches;
        
    },
    
    constructor : window.SearchTerm
};

$(document).on('change', 'input[name=search-box]', function (e) {
    var string = $(this).val(),
            matches = [], i, n = -1, highest = 0, content;
    
    string = string.replace(/[^A-Za-z0-9s]/, ' ');
    string = string.replace(/[ss ]/, ' ');
    string = string.trim();
    string = string.split(' ');
    
    termList.forEach( function (term) {
        matches.push(term.compare(string));
    });
    
    for (i = 0; i < matches.length; i  ) {
        if (matches[i] > n) {
            n = matches[i];
            highest = i;
        }
    }
    
    if (n <= 0) {
        content = '';
    } else {
        content = termList[highest].handle   ': '   termList[highest].description;
    }
    
    $('#output')
        .empty()
        .append(content);
});

// add your search terms here...
SearchTerm.add('Test', '#000', ['test', 'testing']);
SearchTerm.add('Test', '#001', ['test', 'testing']);
SearchTerm.add('Test', '#002', ['test', 'testing']);
// etc.