【问题标题】:if variable contains [duplicate]如果变量包含[重复]
【发布时间】:2012-10-12 08:03:24
【问题描述】:

可能重复:
JavaScript: string contains

我有一个邮政编码变量,并且想在更改/输入邮政编码时使用 JS 将位置添加到不同的变量中。因此,例如,如果输入 ST6,我希望输入 Stoke North。

我不知何故需要做一个 if 语句来运行,例如

if(code contains ST1)
{
    location = stoke central;
}
else if(code contains ST2)
{
    location = stoke north;
} 

等等……

我该怎么做呢?它不是检查“代码”是否等于一个值,但如果它包含一个值,我认为这是我的问题。

【问题讨论】:

  • 这里是检查字符串是否在字符串中的最常用方法的基准:jsben.ch/#/o6KmH

标签: javascript variables if-statement


【解决方案1】:

您可以使用正则表达式:

if (/ST1/i.test(code))

【讨论】:

  • +1 表示不区分大小写的好方法
【解决方案2】:

你可能想要indexOf

if (code.indexOf("ST1") >= 0) { ... }
else if (code.indexOf("ST2") >= 0) { ... }

它检查contains 是否在string 变量code 中的任何位置。这要求 code 是一个字符串。如果您希望此解决方案不区分大小写,则必须使用 String.toLowerCase()String.toUpperCase() 将大小写更改为完全相同。

您也可以使用switch 语句,例如

switch (true) {
    case (code.indexOf('ST1') >= 0):
        document.write('code contains "ST1"');
        break;
    case (code.indexOf('ST2') >= 0):
        document.write('code contains "ST2"');        
        break;        
    case (code.indexOf('ST3') >= 0):
        document.write('code contains "ST3"');
        break;        
    }​

【讨论】:

    【解决方案3】:

    检查一个字符串是否包含另一个字符串的最快方法是使用indexOf

    if (code.indexOf('ST1') !== -1) {
        // string code has "ST1" in it
    } else {
        // string code does not have "ST1" in it
    }
    

    【讨论】:

    • indexOf 如果未找到该字符串,则返回 -1。如果字符串以ST1 开头,它将返回0。这个答案是错误的。检查code 是否以ST1 开头,而不是code 中的任何包含
    【解决方案4】:

    if (code.indexOf("ST1")>=0) { location = "stoke central"; }

    【讨论】:

      【解决方案5】:

      如果您有很多这些要检查,您可能希望存储一个映射列表并循环遍历它,而不是使用一堆 if/else 语句。比如:

      var CODE_TO_LOCATION = {
        'ST1': 'stoke central',
        'ST2': 'stoke north',
        // ...
      };
      
      function getLocation(text) {
        for (var code in CODE_TO_LOCATION) {
          if (text.indexOf(code) != -1) {
            return CODE_TO_LOCATION[code];
          }
        }
        return null;
      }
      

      通过这种方式,您可以轻松添加更多代码/位置映射。如果你想处理多个位置,你可以在函数中建立一个位置数组,而不是只返回你找到的第一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 2021-06-20
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多