我希望那一天能找到你。
所以我有一个没有属性的对象。我正在尝试使用循环向此对象添加多个属性。添加到循环中的每个属性将多次出现在对象中,具体取决于循环运行的次数,每个新属性递增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;
根据循环运行的次数,动态生成一堆漂亮的对象。但我似乎没有得到这个。那么在创建和分配变量时,我是如何将变量从循环中提供给属性的呢?
答案 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