我有多个具有相同前缀名称的数组。
var region1 = ['01','02','03','04','05','06','07'];
var region2 = ['08','09','11','12'];
var region3 = ['13'];
var region4 = ['14','22'];
var region5 = ['10','15','16','17','18','19','20'];
var region6 = ['21','23','24'];
var region7 = ['25','26','27','28','29','30'];
var region8 = ['31','33','36','37','38','39'];
var region9 = ['32','34','35','40','41','42','43','44','45','46','47'];
var prefecture = "33";
根据县值,我想显示地区
if(region1.indexOf(prefecture) != -1){
$('.region1').show();
$('a.region1').addClass('regionSelect');
}
else if(region2.indexOf(prefecture) != -1){
$('.region2').show();
$('a.region2').addClass('regionSelect');
}
else if(region3.indexOf(prefecture) != -1){
$('.region3').show();
$('a.region3').addClass('regionSelect');
}
else if(region4.indexOf(prefecture) != -1){
$('.region4').show();
$('a.region4').addClass('regionSelect');
}
else if(region5.indexOf(prefecture) != -1){
$('.region5').show();
$('a.region5').addClass('regionSelect');
}
else if(region6.indexOf(prefecture) != -1){
$('.region6').show();
$('a.region6').addClass('regionSelect');
}
else if(region7.indexOf(prefecture) != -1){
$('.region7').show();
$('a.region7').addClass('regionSelect');
}
else if(region8.indexOf(prefecture) != -1){
$('.region8').show();
$('a.region8').addClass('regionSelect');
}
工作正常
但我这样做是为了尽量减少代码。
for(var i=1; i<=9; i++){
if('region'+i.indexOf(prefecture) != -1){
$('.region'+i).show();
$('.region'+i).addClass('regionSelect');
}
}
它表示i.indexOf未定义
答案 0 :(得分:5)
使用数组而不是变量。
var regions = [
['01','02','03','04','05','06','07'],
['08','09','11','12'],
// and so on
]
然后按索引选择
for(var i=0; i<9; i++){
if(regions[i].indexOf(prefecture) != -1){
$('.region'+(i+1)).show()
.addClass('regionSelect');
}
}
答案 1 :(得分:2)
我在这里看到很多问题,当人们尝试使用“动态变量”名称时,已经有其他精彩的数据结构,例如Array和Object可用于实现这个目的。
var region = {
"1": ['01','02','03','04','05','06','07'],
"2": ['08','09','11','12'],
"3": ['13'],
/* snip */
};
for(var i=1; i<=9; i++){
if(region[i].indexOf(prefecture) != -1){
$('.region'+i).show();
$('.region'+i).addClass('regionSelect');
}
}
如果绝对必须使用动态变量名,则不能使用var
。如果它们是全局的(window
),则可以执行此操作,然后通过window['region' + i]
访问它们。我根本不推荐这个。
答案 2 :(得分:1)
您需要使用[]
语法引用变量所附加的对象来引用它的子项,如果它们位于全局范围内,您可以尝试使用window
...
for(var i=1; i<=9; i++){
if(window['region'+i].indexOf(prefecture) != -1){
$('.region'+i).show();
$('.region'+i).addClass('regionSelect');
}
}
否则,我希望this['region'+i].indexOf etc...
也能正常工作
答案 3 :(得分:-1)
优先问题。
你需要写
('region'+i).indexOf(prefecture)
否则它被理解为
'region'+(i.indexOf(prefecture))
正如FelixKling在下面指出的那样,这会修复语法错误,但是无法正常工作,因为你要在字符串"region1"
内寻找县。检查其他答案,看看如何真正编码。< / p>