如果使用相同的数据,是否在JavaScript中声明多个变量?

如果使用相同的数据,是否在JavaScript中声明多个变量?,javascript,jquery,Javascript,Jquery,我看到过这样的帖子,关注的是唯一变量(还有很多),但我关注的是很多非唯一变量,例如,我想做一个更大的版本 var rep; var state_def, state_MA, state_WY, state_TN = 'joeblow'; var state_AZ, state_TX = 'moefoe'; var state_MT, state_OR = 'growmo'; v

我看到过这样的帖子,关注的是唯一变量(还有很多),但我关注的是很多非唯一变量,例如,我想做一个更大的版本

            var rep;
            var state_def, state_MA, state_WY, state_TN = 'joeblow';
            var state_AZ, state_TX = 'moefoe';
            var state_MT, state_OR = 'growmo';
            var state_OK, state_LA = 'billyjoe';
            var state_WA, state_NM, state_MS = 'messytess';
            var state_VA, state_NY = 'slickrick';
            var state_CA = 'icecube';

            //or
            var state_def = state_MA = state_WY = state_TN = 'joeblow';
我只是想知道,我用的是这样的开关

switch (capitalise(data.regionName)) {
                case 'Arizona': rep = state_AZ; break;
                case 'Texas': rep = state_TX; break;
                case 'Montana': rep = state_MT; break;
                case 'Oregon': rep = state_OR; break;
                case 'New Mexico': rep = state_NM; break;
                case 'Mississippi': rep = state_MS; break;
                case 'Oklahoma': rep = state_OK; break;
                case 'Louisiana': rep = state_LA; break;
                case 'Washington': rep = state_WA; break;
                case 'Massachusetts': rep = state_MA; break;
                case 'Wyoming': rep = state_WY; break;
                case 'Tennessee': rep = state_TN; break;
                case 'Virginia': rep = state_VA; break;
                case 'Illinois': rep = state_IL; break;
                case 'Nevada': rep = state_NV; break;
                default: rep = state_def; break;
            };

这也将有几千个Zipcode,因此需要一个辅助开关。这就是为什么需要尽可能短地声明state(或zip)变量/用户关联。但我也不想落入任何我可能不知道的陷阱。除了
default:rep=state_def;中断返回为未定义。另外,在IE8中不起作用。

我建议用映射替换您的
开关

var reps = {
    'Arizona': state_AZ,
    'Texas': state_TX,
    // etc.
};

// then you can do this:
var rep = reps[capitalize(data.regionName)];
稍后,您甚至可以将该映射(包括值)作为JSON对象或其他内容从服务器或其他数据源下载

还要注意的是,大多数
状态变量都是未定义的。我不知道这是否是你想要的。如果您只有一些州的数据,那么最好直接构建数据结构:

var reps = {
    'Arizona': undefined, // or just omit from mapping
    'Texas': 'moefoe',
    // etc.
};

并省去所有的
状态变量。

我建议用映射替换
开关

var reps = {
    'Arizona': state_AZ,
    'Texas': state_TX,
    // etc.
};

// then you can do this:
var rep = reps[capitalize(data.regionName)];
稍后,您甚至可以将该映射(包括值)作为JSON对象或其他内容从服务器或其他数据源下载

还要注意的是,大多数
状态变量都是未定义的。我不知道这是否是你想要的。如果您只有一些州的数据,那么最好直接构建数据结构:

var reps = {
    'Arizona': undefined, // or just omit from mapping
    'Texas': 'moefoe',
    // etc.
};

并且省去所有的
state.*
变量。

;未分配state_def、state_MA和state_WY(=未定义)。执行此操作时,只有state_TN等于'joeblow',变量state_def,state_MA,state_WY,state_TN='joeblow';未分配state_def、state_MA和state_WY(=未定义)。仅说明“joeblow”是的,这些都不起作用,以及为什么我需要一个更好的解决方案,比如你的;-)我现在就写出来,然后运行一个测试。+1所有那些
state\uuu
变量也可以被分类到一个对象中。我建议它的目的是
var state\u OK=state\u LA='billyjoe'
,因为原始版本仅使用单个对象变量
state
而不是许多
state.*
变量初始化最后一个变量,可以通过以下方式实现:
var state={};州['OK']=州['LA']='billyjoe';州['CA']='icecube'
@Shane-如果用户/url数据需要更改,那么两级映射可能会起作用。例如,如果
state_AZ
state_TX
始终假定具有相同的用户/url,则情况尤其如此。因此,来自
'Arizona'
'Texas'
的映射都将映射到
'AZ_和_TX'
(例如),然后您将在第二个映射对象中查找值
'Moefee'
。是的,这些都不起作用,因此我需要一个更好的解决方案,就像您的;-)我现在就写出来,然后运行一个测试。+1所有那些
state\uuu
变量也可以被分类到一个对象中。我建议它的目的是
var state\u OK=state\u LA='billyjoe'
,因为原始版本仅使用单个对象变量
state
而不是许多
state.*
变量初始化最后一个变量,可以通过以下方式实现:
var state={};州['OK']=州['LA']='billyjoe';州['CA']='icecube'
@Shane-如果用户/url数据需要更改,那么两级映射可能会起作用。例如,如果
state_AZ
state_TX
始终假定具有相同的用户/url,则情况尤其如此。因此,来自
'Arizona'
'Texas'
的映射都将映射到
'AZ_和_TX'
(例如),然后您将在第二个映射对象中查找值
'Moefee'