У меня есть выпадающий список с возможностью поиска, где я выделяю слова, которые вы ищете, в значениях, которые появляются при его поиске.Однако сейчас при поиске все значения сортируются в алфавитном порядке. Можно ли вместо этого отсортировать их по наилучшему подобранному значению?Может быть с регулярным выражением?Так, например, если я напишу «ak» в списке, значения, содержащие «ak», появятся первыми.Проще говоря, я хочу, чтобы наилучшее подходящее значение было на первом месте.Это мой код атм.Спасибо!
filterOptions() {
if (typeof this.coreOptions === 'undefined' || this.coreOptions === null) return;
if (this.searchModel === null || typeof this.autocomplete === 'undefined') this.options = this.coreOptions.slice(0);
else if (typeof this.autocomplete !== 'undefined')
this.options = this.coreOptions.filter(o => {
return o[this.label].toLowerCase().indexOf(this.searchModel.toLowerCase()) > -1;
});
this.options = this.options.map(o => {
if (this.autocomplete) {
const regex = new RegExp('(' + this.searchModel + ')', 'i');
o.displayLabel = o[this.label].replace(regex, '<span>$1</span>');
} else {
o.displayLabel = o[this.label];
}
return o;
});
}
search(): void {
if (this.searchModel === '') this.searchModel = null;
this.toggleOptions('on');
if (this.allowAnyInput) {
const fakeTarget = {
displayLabel: this.searchModel,
label: this.searchModel,
value: this.searchModel,
};
this.targetedOption = fakeTarget;
return;
}
if (this.searchModel !== null) {
const matches = (this.options = this.coreOptions.filter(o => {
return o[this.label].toLowerCase().indexOf(this.searchModel.toLowerCase()) > -1;
}));
if (matches.length !== 0) this.targetedOption = matches[0];
} else {
this.targetedOption = {};
}
this.filterOptions();
}