我有一个可以是任何东西的字符串。
我有一堆不同的函数,这些函数将根据字符串中的关键字来调用。只有第一个匹配的关键字才适用,因此不需要多个匹配的用例。
假设我有这个逻辑 -如果字符串包含“窗帘”,则调用someCurtainFunction() -如果字符串包含“ cheese”,则调用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;
}
}
在没有评估的情况下,我如何最好地解决这个问题?
答案 0 :(得分:2)
如果params
更改,我建议arrow functions:
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;
}
}