在交换机Javascript案例中使用字符串"includes()"

Ber*_*ram 6 javascript switch-statement

在Javascript中,有没有办法实现类似的东西?

const databaseObjectID = "someId"; // like "product/217637"

switch(databaseObjectID) {
    case includes('product'): actionOnProduct(databaseObjectID); break;
    case includes('user'): actionOnUser(databaseObjectID); break;
    // .. a long list of different object types
}
Run Code Online (Sandbox Code Playgroud)

这是一个好奇的问题,以了解开关/案例的可能性,因为在这个特殊情况下,我已经解决了我的问题使用const type = databaseObjectID.split('/')[0];和应用开关案例type

she*_*nis 10

这样可行,但不应在实践中使用.

const databaseObjectID = "someId"; // like "product/217637"

switch(true) {
    case databaseObjectID.includes('product'): actionOnProduct(databaseObjectID); break;
    case databaseObjectID.includes('user'): actionOnUser(databaseObjectID); break;
    // .. a long list of different object types
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不在实践中使用它? (2认同)
  • 因为它是一种 hack,并不一定比一组缺少中断的 if/elseif 更容易阅读,从而使其启动代码更短。 (2认同)

mpl*_*jan 6

您的使用将被视为滥用情况。

而是只使用ifs

     if (databaseObjectId.includes('product')) actionOnProduct(databaseObjectID); 
else if (databaseObjectId.includes('user'))    actionOnUser(databaseObjectID); 
// .. a long list of different object types
Run Code Online (Sandbox Code Playgroud)

如果ObjectId包含产品或用户周围的静态内容,则可以将其删除并将用户或产品用作键:

var actions = {
  "product":actionOnProduct,
  "user"   :actionOnUser
}

actions[databaseObjectId.replace(/..../,"")](databaseObjectId);
Run Code Online (Sandbox Code Playgroud)


小智 6

抱歉,我是菜鸟,所以可能要清理一下,但这是个主意。传递给函数以检查并返回类别,然后使用开关。

function classify(string){
  var category = categorize(string);
  switch (category) {
    case 'product':
      console.log('this is a product');
      break;
    case 'user':
      console.log('this is a user');
      break;
    default:
      console.log('category undefined');    
  }
}

function categorize(string){
  if (string.includes('product')){
    return 'product';
  }
  if (string.includes('user')){
    return 'user';
  }
}

classify("product789");
classify("user123");
classify("test567");
Run Code Online (Sandbox Code Playgroud)

也很抱歉,因为您的示例不匹配。


JMi*_*lTX 6

问题:

\n
\n

在 switch Javascript 情况下使用字符串 \xe2\x80\x9cincludes()\xe2\x80\x9d

\n
\n

虽然该includes()方法可以工作,但它区分大小写,并且只匹配任何字符。我找到了一个我更喜欢的正则表达式解决方案,并且提供了很大的灵活性。例如,您可以轻松地将其更改为仅匹配单词。

\n

\r\n
\r\n
var sourceStr = \'Some Text and literaltextforcase2 and more text\'\n\nswitch (true)  {  // sourceStr\n\n  case (/LiteralTextForCase1/i.test(sourceStr)):\n      console.log(\'Case 1\');\n      break;\n\n  case (/LiteralTextForCase2/i.test(sourceStr)):\n    console.log(\'Case 2\');\n    break;\n\n  default:\n      console.log(\'ERROR No Case provided for: \' + sourceStr);\n};\n\n//-->Case 2
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n