JavaScript:将变量与数组数组中的元素匹配

标签 javascript jquery arrays loops

我从后端加载了前两个变量,然后我想匹配我返回的品牌名称并返回两个字母的代码。我将相关品牌放入一系列数组中。

似乎 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 条件为 true。

所以,如果你输入:

,你会得到更好的结果:
if ($.inArray(brand,brand_code[i])>-1) {

来自jQuery documentation :

The $.inArray() method is similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't find a match. If the first element within the array matches value, $.inArray() returns 0.

关于JavaScript:将变量与数组数组中的元素匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300974/

相关文章:

javascript - 在JS数组中设置对象参数的问题

javascript - Js中如何将输入的text-value转换为对象的属性值?

javascript - React - setState 不更新数组

javascript - 尝试从 "Get"请求中获取数据

jquery - ko.observableArray() 对于 1000+ <div> 元素来说非常慢

javascript - 根据另一个数组中的值删除嵌套对象数组中的值

javascript - 正确循环 .each(function) 并将数字字符串格式化为电话号码

javascript - 为什么 delete 运算符返回 true 即使属性没有从对象中删除

javascript - 即使鼠标不移动,Webkit 和 Safari 也会触发 mousemove

arrays - 在数据结构中包含 ST(U) 数组?