簡體   English   中英

JavaScript:將變量與數組數組中的元素匹配

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM