繁体   English   中英

Javascript 检查字符串的一部分是否包含在枚举值中

[英]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);

TS游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM