[英]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)
这将检查str
中key
的第一个实例。
因此,在您的循环中, 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.