Как отсортировать результаты поиска по выпадающему списку на основе наиболее подходящего значения? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть выпадающий список с возможностью поиска, где я выделяю слова, которые вы ищете, в значениях, которые появляются при его поиске.Однако сейчас при поиске все значения сортируются в алфавитном порядке. Можно ли вместо этого отсортировать их по наилучшему подобранному значению?Может быть с регулярным выражением?Так, например, если я напишу «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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...