[英]Javascript Check if part of string is contained in enum values
我有一个枚举
enum YourEnum {
enum1 = 'Sunday',
enum2 = 'Monday',
enum3 = 'Tuesday',
}
我想检查是否包含单词的某些部分。例如,如果用户提示“mon”,我希望它与星期一匹配。
我有两个问题:我需要将 enum 的值转换为小写,并且我需要单词匹配的那部分。
我试图这样做:
var value = "mon";
if (Object.values(YourEnum).toString().toLowerCase().includes((value))) {
console.log("some values match")
}
或者
const list=Object.values(YourEnum).toString().toLowerCase();
for (let i = 0; i < list.length; i++){
if (list[i].indexOf("mon") >= 0){
console.log("some values match", list[i]);
}
}
但我没有得到我期望的结果。
有任何想法吗 ?
您是否正在尝试查找您的搜索字符串匹配的枚举项? 在这种情况下,尝试使用数组.find
方法检查每个枚举成员是否匹配,返回第一个:
/* enum YourEnum { enum1 = 'Sunday', enum2 = 'Monday', enum3 = 'Tuesday', } */ // This is how a typescript enum is transpiled, it is equivalent to the typescript code above. var YourEnum; (function(YourEnum) { YourEnum["enum1"] = "Sunday"; YourEnum["enum2"] = "Monday"; YourEnum["enum3"] = "Tuesday"; })(YourEnum || (YourEnum = {})); // Here is an example of how it might be done. const findMatchingDay = search_str => Object.values(YourEnum).find(day => day.toLowerCase().includes(search_str)); console.log(findMatchingDay("mon")); console.log(findMatchingDay("not_a_day"));
const list=Object.values(YourEnum).toString().toLowerCase();
当您使用上面的代码行时,它将列表转换为字符串
"sunday,monday,tuesday"
您可以使用下面的脚本来获得预期的结果
const list=Object.values(YourEnum);
for (let i = 0; i < list.length; i++){
if (list[i].toString().toLowerCase().indexOf("mon")>=0){
console.log("some values match", list[i]);
}
}
此代码将通过过滤enum
的小写版本来查找搜索。 请注意,由于 babel,StackSnippets 不喜欢enum
关键字,因此必须包含指向 TS Playground 代码段的链接。
Object.values
返回一个数组,您可以使用过滤器过滤掉不contain
测试的所有内容。
const test: string = 'mon';
enum YourEnum {
enum1 = 'Sunday',
enum2 = 'Monday',
enum3 = 'Tuesday',
}
const out = Object.values(YourEnum).filter(value=>value.toLowerCase().includes(test));
console.log(out);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.