1

如果我有一堆对象,并且在这些对象中是字符串“id”(与对象名称相同),我如何使用该字符串来引用对象?

例子:

//These objects are tests - note the id's are the same as the object name

var test1 = {
    id : "test1",
    data : "Test 1 test 1 test 1"
}

var test2 = {
    id : "test2",
    data : "Test 2 test 2 test 2"
}


/* ----- My Function   ----- */

var myObj = null;

function setMyObj(obj){
   myObj = obj;
}

setMyObj(test1);

/* ----- My Function   ----- */

现在,如果我调用以下命令:

myObj.id;

结果是“test1”(一个字符串)。如果我想用它从 test1 中获取数据,我该怎么做?

"myObj.id".data
[myObj.id].data

^^^

这些都不行!

干杯,有钱

4

4 回答 4

4

如果您的变量是在全局范围内定义的,则以下工作

window[ myObj.id ].data

如果你在一个函数的范围内,事情会变得更加困难。最简单的方法是在 window 上的特定命名空间中定义您的对象并检索类似于上述代码的对象。

于 2012-06-19T14:02:30.707 回答
2

将 test1 和 test2 存储在键值集合(也称为对象)中。然后像这样访问它:

collection[myObj.id].data
于 2012-06-19T14:02:59.760 回答
2

如果你想使用一个变量来引用某个东西,那么就让它成为一个对象属性,而不是一个变量。如果它们足够相关,可以以这种方式访问​​,那么它们就足够相关,可以有适当的数据结构来表达这种关系。

var data = {
    test1: {
        id: "test1",
        data: "Test 1 test 1 test 1"
    },
    test2: {
        id: "test2",
        data: "Test 2 test 2 test 2"
    }
};

然后您可以访问:

alert( data[myObj.id] );
于 2012-06-19T14:04:15.840 回答
0

很好的答案,感谢您的帮助,以防将来有人发现它,这就是我将要使用它的方式:

var parent = {}

parent.test1 = {
    id : "test1",
    data : "Test 1 test 1 test 1"
}

parent.test2 = {
    id : "test2",
    data : "Test 2 test 2 test 2"
}


var myObj = null;

function setMyObj(obj){
   myObj = obj;
}


setMyObj(parent.test1);

parent[myObj.id] = null;
//Test1 object is now null, not myObj!
于 2012-06-19T14:17:25.993 回答