[英]JavaScript: match variable to element in array of arrays
我從后端加載了前兩個變量,然后我想匹配返回的品牌名稱並返回兩個字母的代碼。 我將相關品牌放在一個數組中。
似乎match()
不是一個選項,因為我不能在regExp()
放入變量。
這不起作用:
if (brand.indexOf(brand_code[i])) {
bc = brand_code[i][1];
}
這沒用。
if (brand_code[i][0]===brand)
bc = brand_code[i][1];
}
這是我的最新嘗試。
$(document).ready(function() {
var phone_model='$request.getHeader("x-wurfl-model-name")',
brand='$request.getHeader("x-wurfl-brand-name")',
brand_code=[
['Alcatel','AL'],
['Huawei','HU'],
['LG','LG'],
['Motorola','MT'],
['Samsung','SA'],
['Unimax','UX'],
['ZTE','ZE']];
for (var i = brand_code.length - 1; i >= 0; i--) {
if ($.inArray(brand,brand_code[i])) {
bc = brand_code[i][1];
}
}
$('.faq .mobile_tutorial a').append(bc+phone_model);
});
這給我一個錯誤,無法讀取未定義的屬性“ 3”,其中phone_model='Z990g'
& brand='ZTE'
我要去哪里錯了?
如果您要在變量brand_code
中以不同的方式構造數據,它將變得容易一些:
brand_code={
'Alcatel':'AL',
'Huawei':'HU',
'LG':'LG',
'Motorola':'MT',
'Samsung':'SA',
'Unimax':'UX',
'ZTE':'ZE'
};
bc = brand_code[brand];
}
這將不需要通過數組。 如果您使用上面的基於對象的查找,則大多數JavaScript引擎會在固定時間內找到匹配項。 在ES中,您可以將Map
用於相同的目的和相同的效率。
當ZTE
與數組的第一個元素匹配時, $.inArray
返回0,因此在這種情況下, if
條件將為false
。 但更糟糕的是,當未找到ZTE
時,該方法返回-1,這使if
條件成立。
因此,如果您輸入以下內容,可能會得到更好的結果:
if ($.inArray(brand,brand_code[i])>-1) {
從jQuery文檔中 :
$.inArray()
方法類似於JavaScript的本機.indexOf()
方法,因為它找不到匹配項時返回-1。 如果數組中的第一個元素與value匹配,則$.inArray()
返回0。
使用Array.filter
查找匹配項,然后可以檢查結果的長度> 0並從中獲取result[0][1]
,或者使用Array.reduce
僅返回代碼:
// filter down to match and reduce the match to it's code value
brand_code.filter(function(pair) {
return pair[0] === brand
}).reduce(function(out, match) {
return match[1];
}, '');
或ES6:
brand_code.filter(pair => pair[0] === brand)
.reduce((_, match) => match[1], '');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.