如何使用SQL中的“ LIKE”之类的选项设置下拉选择的项目?

时间:2019-01-08 14:17:41

标签: angular typescript angular5

因此,我有一个从数据库返回的对象,并且该对象有一个我感兴趣的字段。因此,假设我返回了一个具有Person字段的Description对象。

export class Person
{
     PersonID:number;
     PersonName:string;
     Description:string;
}

我从数据库中检索了Person,现在想填写UI中的某些字段。假设我的人是

PersonID: 1
PersonName: John
Description: A Big Guy

现在我有一个类似这样的值的下拉列表:

ABC (a bit cool)
ABB (a bit bad)
ABG (a big guy)

然后我将这些值分配给2个文本字段和一个下拉列表。现在,如果描述和选项之一相同,我将知道如何做:

assignPersonDetails(cPerson: Person): void {
    //assignments
    $('#descriptionSelect option:selected').text(cPerson.Descrption)
}

但不进行处理。

由于括号中的文本实际上是许多不同语言的翻译,因此我需要使用缩写进行匹配。因此,我接受我的描述并添加:

var result = cPerson.Description.match(/[A-Z]/g).join("");

那会给我result = "ABG"

现在,我需要像SQL WHERE description LIKE 'result%'那样设置选定的选项。因此,当我从数据库A Big Guy中获取数据时,我需要将其与下拉列表中的选项进行匹配,其中ABG位于前面。我该怎么办?

编辑:

我的尝试如下,但是我不确定它是否正确(额外检查,如果有多个ABG记录,只需选择最短的记录即可):

var descriptionResult = cPerson.Description.match(/[A-Z]/g);
            var filter = "";
            if(descriptionResult !== null)
            {
                filter = descriptionResult.join("");
            }   
            if(filter !== "")
            {
                var localOptionsArray = new Array()
                var fts = <HTMLSelectElement>document.getElementById("descriptionSelect");
                for (let i=0;i< fts!.options.length; i++)
                {
                    if(fts!.options[i].value.substring(0,3) == filter)
                    {
                        localOptionsArray[i] = fts!.options[i].value
                    }
                }
                if(localOptionsArray.length > 0)
                {
                    $('#descriptionSelect option:selected').text(localOptionsArray.reduce((a, b) => a.length <= b.length ? a : b));                          
                }
            }              
            else
            {
                $('#descriptionSelect option:selected').val(0);
            }

0 个答案:

没有答案