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

时间:2017-04-15 07:29:40

标签: 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
}

这更像是一个了解切换/案例可能性的好奇心问题,因为在这个特殊情况下我使用const type = databaseObjectID.split('/')[0];解决了我的问题并在type上应用了切换案例

4 个答案:

答案 0 :(得分:9)

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

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
}

答案 1 :(得分:5)

您的使用将被视为滥用案例。

而只是使用ifs

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

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

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

actions[databaseObjectId.replace(/..../,"")](databaseObjectId);

答案 2 :(得分:4)

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

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");

很抱歉,也是因为你的例子不匹配。

答案 3 :(得分:1)

问题:

在切换Javascript的情况下使用字符串“ includes()”

尽管includes()方法可以使用,但它区分大小写,并且只匹配任何字符。我找到了一个我更喜欢的Regex解决方案,并提供了很多灵活性。例如,您可以轻松地更改它以仅匹配单词。

var sourceStr = 'Some Text and literaltextforcase2 and more text'

switch (true)  {  // sourceStr

  case (/LiteralTextForCase1/i.test(sourceStr)):
      console.log('Case 1');
      break;

  case (/LiteralTextForCase2/i.test(sourceStr)):
    console.log('Case 2');
    break;

  default:
      console.log('ERROR No Case provided for: ' + sourceStr);
};

//-->Case 2