尝试使用循环向Javascript对象添加多个属性

时间:2013-04-09 16:09:18

标签: javascript object loops properties

我希望那一天能找到你。

所以我有一个没有属性的对象。我正在尝试使用循环向此对象添加多个属性。添加到循环中的每个属性将多次出现在对象中,具体取决于循环运行的次数,每个新属性递增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 个答案:

答案 0 :(得分:20)

尝试使用方括号表示法来命名

   myObject['propa' + i] = foo;

答案 1 :(得分:11)

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

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'}
]

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

答案 2 :(得分:5)

使用array-access方法设置属性。

myObject = {  };

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

答案 3 :(得分:1)

你可以使用

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

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

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

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

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