将字符串与数组匹配

时间:2016-12-21 21:39:57

标签: javascript arrays string match

我需要你的帮助,

出于某种奇怪的原因,当我的var str设置为" OTHER-REQUEST-ASFA"匹配的密钥返回为" ASF"而不是" ASFA"

如何获取" ASFA"的返回输出键?我的str是" OTHER-REQUEST-ASFA"

function test() {

    var str = "OTHER-REQUEST-ASFA"

    var filenames = {
        "OTHER-REQUEST-ASF": "ASF",
        "OTHER-REQUEST-ASFA": "ASFA",
        "OTHER-REQUEST-ASFB": "ASFB",
        "OTHER-REQUEST-ASFC": "ASFC",
        "OTHER-REQUEST-ASFE": "ASFE" 
    }

    for (var key in filenames) {
        if (str.indexOf(key) != -1) { alert(filenames[key]) }
    }

}

4 个答案:

答案 0 :(得分:1)

您可以从

切换
Vector

str.indexOf(key)



key.indexOf(str)




答案 1 :(得分:1)

要回答为什么它不能按你的意愿工作......

你有:

str.indexOf(key)

这将检查keystr的第一个实例。

因此,在您的循环中,key首先等于OTHER-REQUEST-ASF的{​​{1}},因此条件为真。

但是,要做你想做的事情,如果你知道模式总是OTHER-REQUEST-ASFA,最简单的方法是使用split()

OTHER-REQUEST-XYZ

将始终返回最后一个str.split('-')[2]

之后的最后一部分

答案 2 :(得分:0)

原因"其他请求-ASFA" .indexOf(" OTHER-REQUEST-ASF")不会返回-1,因此它将显示" ASF"

答案 3 :(得分:0)

您还可以使用静态方法Object.keys()来获取键数组



var test = () =>{
  var str = "OTHER-REQUEST-ASFA"

  var filenames = {
    "OTHER-REQUEST-ASF": "ASF",
    "OTHER-REQUEST-ASFA": "ASFA",
    "OTHER-REQUEST-ASFB": "ASFB",
    "OTHER-REQUEST-ASFC": "ASFC",
    "OTHER-REQUEST-ASFE": "ASFE"
  }
  Object.keys(filenames).forEach(x => {
    if ( x.indexOf(str) !== -1) 
      console.log(filenames[str]);
  });
}
test();