在Javascript中使用变量作为对象成员名称

时间:2011-07-28 13:22:33

标签: javascript json

我正在编写代码来在Javascript中设置查找结构

var g_Codes = {
    "Type1": {
        "U.S.": "US1",
        "Asia": "AS1",
        "Europe": "EU1"
    },
    "Type2": {
        "U.S.": "X2",
        "Asia": "X2",
        "Europe": "X2"
    },
    "Type3": {
        "U.S.": "X3",
        "Asia": "X3",
        "Europe": "X3"
    },
    "Type4": {
        //  Does not exist yet
    }
};

所以你可以通过交叉引用类型&来循环这个并获取代码。区域。

但是,我想这样做,所以我可以这样做:

var US_REGION = "U.S.";
var AS_REGION = "Asia";
var EU_REGION = "Europe";

var g_Codes = {
    "Type1": {
        US_REGION: "US1",
        AS_REGION: "AS1",
        EU_REGION: "EU1"
    },
    "Type2": {
        US_REGION: "X2",
        AS_REGION: "X2",
        EU_REGION: "X2"
    },
    "Type3": {
        US_REGION: "X3",
        AS_REGION: "X3",
        EU_REGION: "X3"
    },
    "Type4": {
        //  Does not exist yet
    }
};

并可以更轻松地更改标准区域名称。

如果我试试这个:

for(let focus in g_Codes) {
     print(focus);
}

第一个给了我“美国”,“亚洲”等,而第二个给了“US_REGION”,“AS_REGION”

如何使用变量,但保持循环g_Codes的简单性?

3 个答案:

答案 0 :(得分:4)

你不能用你想要的符号。

您可以先定义对象:

var g_Codes = {
    Type1: {},
    Type2: {},
    Type3: {}
};

然后使用属性名称和方括号表示法的变量填充它:

g_Codes.Type1[US_REGION] = 'US1';

答案 1 :(得分:0)

为什么不采用这种结构:

var g_Codes = {
    'Type1': ['US1', 'AS1', 'EU1'],
    'Type2': ['X21', 'X22', 'X23'],
    'Type3': ['X31', 'X32', 'X33']
};

现在您可以使用索引来访问字符串:

g_Codes.Type1[0] // returns 'US1'
g_Codes.Type2[1] // returns 'X22'

您必须记住的是哪个索引(整数)代表哪个区域。

您可以定义一个辅助对象:

var REGIONS = {
    'US': 0,
    'Asia': 1,
    'Europe': 2
}

然后:

g_Codes.Type1[ REGIONS.Europe ] // returns 'EU1'

答案 2 :(得分:0)

您可以重新组织您的结构吗?

var US_REGION = "U.S.";
var AS_REGION = "Asia";
var EU_REGION = "Europe";

var g_Codes = {
    "U.S." : {
        "Type1" : "US1",
        "Type2" : "X2",
        "Type3" : "X3"
    },
    "Asia" : {
        "Type1" : "US1",
        "Type2" : "X2",
        "Type3" : "X3"
    },
    "Europe" : {
        "Type1" : "US1",
        "Type2" : "X2",
        "Type3" : "X3"
    }
};

var single_region = g_Codes['U.S.'];

for(var key in single_region) {
    console.log(key, single_region[key]);
}

// or a different loop
for (var region in g_Codes) {
    for(var key in g_Codes[region]) {
       console.log(key, g_Codes[region][key]);
    }
}