#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.