[英]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.