根据关键字对字符串进行分类

时间:2018-11-16 19:16:58

标签: javascript

我有一个可以是任何东西的字符串。

我有一堆不同的函数,这些函数将根据字符串中的关键字来调用。只有第一个匹配的关键字才适用,因此不需要多个匹配的用例。

假设我有这个逻辑 -如果字符串包含“窗帘”,则调用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;
  }
}

在没有评估的情况下,我如何最好地解决这个问题?

1 个答案:

答案 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;
    }
}