16

我希望这一天能找到你。

所以我有一个没有属性的对象。我正在尝试使用循环向该对象添加多个属性。添加到循环中的每个属性将根据循环运行的次数多次出现在对象中,每个新属性递增 1。

所以我有这样的事情:

myObject = {  };

for(i = 0; i < 2; i++){
    myObject.propA + i = foo;
    myObject.propB + i = bar;
};

我想产生这样的东西:

myObject.propA0 = foo;
myObject.propB0 = bar;
myObject.propA1 = foo;
myObject.propB2 = bar;

根据循环运行的次数,动态生成一堆漂亮的对象。但我似乎没有得到这个。那么,在创建和分配变量时,我究竟如何将循环中的变量提供给属性呢?

4

4 回答 4

30

尝试对名称使用方括号表示法

   myObject['propa' + i] = foo;
于 2013-04-09T16:10:48.683 回答
13

正如其他用户所说,您必须使用括号表示法通过名称字符串引用属性:

myObject['propA' + i] = 'foo';

但是为什么不使用对象数组,而不是使用具有相似编号属性名称的单个对象呢?像这样的东西:

var myArray = [];
for(i = 0; i < 2; i++){
    myArray.push({
        propA: 'foo',
        propB: 'bar'
    });
};

这应该产生:

[
    { propA: 'foo', propB: 'bar'},
    { propA: 'foo', propB: 'bar'}
]

在我看来,它看起来更干净。

于 2013-04-09T16:21:37.357 回答
6

使用数组访问方法设置属性。

myObject = {  };

for(i = 0; i < 2; i++){
    myObject['propA' + i] = foo;
    myObject['propB' + i] = bar;
};
于 2013-04-09T16:11:21.183 回答
1

你可能会使用

object['popA'+i]=... 

创建标准属性或使用 getter/setter 属性,在这种情况下,您需要使用

Object.defineProperty(object, *propertyname*, *propertyDescriptor*).  

后者为您提供了有关已创建属性的更多选项。

这里的所有细节:
https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty

于 2013-04-09T16:14:31.007 回答