我从后端加载了前两个变量,然后我想匹配我返回的品牌名称并返回两个字母的代码。我将相关品牌放入一系列数组中。
似乎 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) {
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/