我有一个输入,用户可以在其中输入搜索条件,然后在旁边输入一个下拉菜单,以选择用户要搜索的字段。对于字符串值,效果很好,但其中一个字段被定义为枚举,用户可以选择只输入部分搜索值。
例如,考虑:
enum DaysOfWeek {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
}
用户可以只写“ Mon”,然后找到该特定字段上所有值为DaysOfWeek.Monday的项目。
这怎么实现?
谢谢。
答案 0 :(得分:0)
我认为您最好的选择是创建一个映射集合。
enum DaysOfWeek {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
}
const dayMappings = [
{ text: 'monday', key: DaysOfWeek.Monday },
{ text: 'tuesday', key: DaysOfWeek.Tuesday },
{ text: 'wednesday', key: DaysOfWeek.Wednesday },
{ text: 'thursday', key: DaysOfWeek.Thursday },
{ text: 'friday', key: DaysOfWeek.Friday }
]
const getDayEnumFromUserInput = (text: string) => {
return dayMappings.find(m => m.text.startsWith(text.toLowerCase()));
};
您还可以在indexOf() >= 0
谓词中使用startsWith()
代替find()
。不幸的是,IE不支持startsWith()
。