javascript - 根据关键字对字符串进行分类
问题描述
我有一个可以是任何东西的字符串。
我有一堆不同的函数,它们将根据字符串中的关键字被调用。只有第一个匹配的关键字适用,因此不需要多个匹配的用例。
假设我有这个逻辑 - 如果字符串包含“窗帘”,则调用 someCurtainFunction() - 如果字符串包含“奶酪”,则调用 someCheeseFunction()
现在我正在这样做:
if(someString.includes('curtains')){
someCurtainFunction(params);
} else if(someString.includes('cheese')){
someCheeseFunction(params);
}
这很好 - 它有效。但名单很长。它不是最易读的。
所以我想到了这样的事情,但使用起来似乎有点不好eval()
var keywords = {
'curtains': 'someCurtainFunction(params)',
'cheese': 'someCheeseFunction(params)'
}
for(var keyword of Object.keys(keywords)){
if(someString.includes(keyword)){
eval(keywords[keyword]);
break;
}
}
如果没有评估,我将如何最好地解决这个问题?
解决方案
如果更改,我会建议使用箭头功能:params
var keywords = {
'curtains': ()=>someCurtainFunction(params),
'cheese': ()=>someCheeseFunction(params)
}
for (let keyword of Object.keys(keywords)){
if(someString.includes(keyword)){
keywords[keyword]();
break;
}
}
否则,如果所有函数都使用相同的 调用params
,只需存储对函数的引用:
var keywords = {
'curtains': someCurtainFunction,
'cheese': someCheeseFunction
}
for (let keyword of Object.keys(keywords)){
if(someString.includes(keyword)){
keywords[keyword](params);
break;
}
}
推荐阅读
- c# - 非异步调用异步方法时出错
- r - 循环到通过矩阵
- r - rmarkdown/bookdown:即时编辑 `metadata$abstract`?
- linux - 在 ASLR 系统上运行非位置无关的可执行文件
- image - facebook如何在聊天框中检测带有url的图像
- c# - 使用 ITextSharp 将 HTML 页面转换为 PDF 时缺少 CSS 样式
- logging - gwt 日志记录不起作用
- powershell - 引用清单中 FileList 属性中包含的文件
- angular - 如何在茉莉花中测试 map() 响应 JSON
- arrays - C++ 如何从字符串数组元素中增加 Int 变量