首页 > 解决方案 > 根据关键字对字符串进行分类

问题描述

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

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

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

如果没有评估,我将如何最好地解决这个问题?

标签: javascript

解决方案


如果更改,我会建议使用箭头功能: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;
    }
}

推荐阅读