繁体   English   中英

将字符串匹配到数组

[英]Matching a string to an array

我需要你的帮助

出于某些奇怪的原因,当我的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]) }
    }

}

您可以从

str.indexOf(key)

key.indexOf(str)

 function test() { var str = "OTHER-REQUEST-ASFA", filenames = { "OTHER-REQUEST-ASF": "ASF", "OTHER-REQUEST-ASFA": "ASFA", "OTHER-REQUEST-ASFB": "ASFB", "OTHER-REQUEST-ASFC": "ASFC", "OTHER-REQUEST-ASFE": "ASFE" }, key; for (key in filenames) { if (key.indexOf(str) != -1) { console.log(filenames[key]); } } } test(); 

要回答为什么它无法按您想要的方式工作...

你有:

str.indexOf(key)

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

因此,在您的循环中, key优先等于OTHER-REQUEST-ASF OTHER-REQUEST-ASFA一部分OTHER-REQUEST-ASF ,因此条件为true。


但是,要执行您想做的事情,如果您知道模式始终为OTHER-REQUEST-XYZ ,则最简单的方法是使用split()

str.split('-')[2]

总是在最后一个之后返回最后一个部分-

原因“ OTHER-REQUEST-ASFA”。indexOf(“ OTHER-REQUEST-ASF”)将不会返回-1,因此将显示“ ASF”

您还可以使用静态方法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(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM