Javascript 在循环内部创建动态变量以访问数组
我有多个具有相同前缀名称的数组Javascript 在循环内部创建动态变量以访问数组,javascript,Javascript,我有多个具有相同前缀名称的数组 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',
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');
}
}
(var i=1;i优先级问题的
你需要写作
('region'+i).indexOf(prefecture)
否则,它被理解为
'region'+(i.indexOf(prefecture))
正如下面FelixKling所指出的,这修复了语法错误,但不起作用,因为您将在字符串“region1”
等中查找辖区。请查看其他答案,了解如何真正编写此代码。使用数组而不是变量
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');
}
}
对于(var i=0;i您需要引用变量附加到的对象,使用[]
语法引用它的子对象,如果它们在全局范围内,您可以尝试使用窗口
for(var i=1; i<=9; i++){
if(window['region'+i].indexOf(prefecture) != -1){
$('.region'+i).show();
$('.region'+i).addClass('regionSelect');
}
}
for(var i=1;i我在这里看到了很多问题,人们试图使用“动态变量”名称,而现在已经有了其他出色的数据结构,如数组和对象,可用于此确切目的
var region = {
"1": ['01','02','03','04','05','06','07'],
"2": ['08','09','11','12'],
"3": ['13'],
/* snip */
};
用于(var i=1;iI已经可以告诉您,这将始终返回-1
,因为字符串regionX
将永远不会包含地区
@FelixKling:…Doh.我正在处理文字错误,但它后面仍然有逻辑错误…OP使用.regionX
和a.regionX
作为选择项第一个例子中的rs。它们可能指的不是相同的元素。@FelixKling:True。我在排除a
的问题中基于重构例子的选择。非常感谢。看起来非常干净和完美
for(var i=1; i<=9; i++){
if(region[i].indexOf(prefecture) != -1){
$('.region'+i).show();
$('.region'+i).addClass('regionSelect');
}
}