Estoy tratando de crear una función de búsqueda simple basada en palabras clave en una historia de Twine usando Javascript. Tengo algo funcional usando esta guía, pero estoy tratando de modificarlo ligeramente. Me gustaría que la búsqueda arrojara todas las coincidencias, en lugar de solo la más alta, o al menos las 5 coincidencias más altas. Puede alguien ayudarme con esto? Desafortunadamente, no estoy muy familiarizado con Javascript, por lo que tratar de averiguar qué cambiar y luego a qué cambiarlo ha sido muy difícil.
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-9\s]/, ' '); string = string.replace(/[\s\s+]/, ' '); 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.