因此,我有一个从数据库返回的对象,并且该对象有一个我感兴趣的字段。因此,假设我返回了一个具有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);
}