Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:将变量与数组数组中的元素匹配_Javascript_Jquery_Arrays_Loops - Fatal编程技术网

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

JavaScript:将变量与数组数组中的元素匹配,javascript,jquery,arrays,loops,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).r

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

似乎
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\u model='Z990g'
&
brand='ZTE'


我哪里出错了?

如果您在变量
brand\u code
中以不同的结构构建数据,则会变得更容易:

    brand_code={
        'Alcatel':'AL',
        'Huawei':'HU',
        'LG':'LG',
        'Motorola':'MT',
        'Samsung':'SA',
        'Unimax':'UX',
        'ZTE':'ZE'
    };
    bc = brand_code[brand];
}
这不需要通过数组。如果使用上面基于对象的查找,大多数JavaScript引擎都会在固定时间内找到匹配项。在ES中,您可以使用
地图
,以实现相同的目的和相同的效率

关于你的尝试
$.inArray
ZTE
匹配数组的第一个元素时返回0,因此在这种情况下
if
条件将为
false
。但更糟糕的是,当未找到
ZTE
时,该方法返回-1,这使得
if
条件为真

因此,如果您将以下内容放在

if ($.inArray(brand,brand_code[i])>-1) {
从:

$.inArray()
方法类似于JavaScript的本机
.indexOf()
方法,在未找到匹配项时返回-1。如果数组中的第一个元素与值匹配,
$.inArray()
返回0


如果您在变量
brand_code
中以不同的结构构建数据,则会变得更容易:

    brand_code={
        'Alcatel':'AL',
        'Huawei':'HU',
        'LG':'LG',
        'Motorola':'MT',
        'Samsung':'SA',
        'Unimax':'UX',
        'ZTE':'ZE'
    };
    bc = brand_code[brand];
}
这不需要通过数组。如果使用上面基于对象的查找,大多数JavaScript引擎都会在固定时间内找到匹配项。在ES中,您可以使用
地图
,以实现相同的目的和相同的效率

关于你的尝试
$.inArray
ZTE
匹配数组的第一个元素时返回0,因此在这种情况下
if
条件将为
false
。但更糟糕的是,当未找到
ZTE
时,该方法返回-1,这使得
if
条件为真

因此,如果您将以下内容放在

if ($.inArray(brand,brand_code[i])>-1) {
从:

$.inArray()
方法类似于JavaScript的本机
.indexOf()
方法,在未找到匹配项时返回-1。如果数组中的第一个元素与值匹配,
$.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], '');

使用
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], '');

indexOf返回索引的编号,而不是true/false。如果未找到,则返回
-1
品牌
的内容是什么?indexOf返回索引的数字,不是真/假。如果未找到,则返回
-1
品牌的内容是什么
?谢谢。请注意,在性能方面,这比必须迭代数组的
过滤器
减少
要好。但是如果OP的数据很小的话,这是不相关的,好像是这样。谢谢。请注意,在性能方面,这比必须迭代数组的
过滤器
减少
要好。但是如果OP的数据很小的话,这是不相关的,就像它看起来是这样。这很好,我当然希望ES6是一个选择。遗憾的是,我必须支持一些仍然使用Android 2.3的设备。这非常好,我当然希望ES6是一个选项。遗憾的是,我不得不支持一些仍然使用安卓2.3的设备。