我正在尝试动态动态创建对象文字。所以我从一个空对象开始:
var myobj = {}
然后添加条目,使其最终看起来像这样:
var myobj = {
row1 = {
thing1 : 'thing',
thing2 : 'thing'
},
row2 = {
thing1 : 'thing',
thing2 : 'thing'
}
}
我一直在尝试:
for(var i = 0; i<rows.length; ++i) {
myobj.row[count].thing1 = 'thing';
myobj.row[count].thing2 = 'thing'
}
但这似乎不起作用。我得到一个无法设置未定义错误的属性。
我有什么想法可以做到这一点吗?
答案 0 :(得分:4)
您必须先为myobj.row
提供一个值(以及一个可以接受属性的数据,例如数组或对象),然后才能为myobj.row[count]
提供一个值(myobj.row[count]
必须在myobj.row[count].thing1
或myobj.row[count].thing2
之前可以指定一个值。
var myobj = { row: [] };
for(var i = 0; i<rows.length; ++i) {
var count = i;
myobj.row[count] = {};
myobj.row[count].thing1 = 'thing';
myobj.row[count].thing2 = 'thing';
}
此外,如果您要创建名为row1
的属性,则必须使用["row" + 1]
而不是.row.1
)
var myobj = {};
for(var i = 0; i<rows.length; ++i) {
var count = i;
myobj['row' + count] = {};
myobj['row' + count].thing1 = 'thing';
myobj['row' + count].thing2 = 'thing';
}
答案 1 :(得分:0)
当它是字符串时,你正在将行作为数组进行处理。要使用动态字符串,您需要将字符串“row”放在括号内。
myobj.row[count].thing1 = 'thing';
myobj.row[count].thing2 = 'thing'
应该是
myobj["row" + count].thing1 = 'thing';
myobj["row" + count].thing2 = 'thing'
但是如果你把它当作“数组”来对待它。你为什么不用数组?
var myobj = {
rows : [
{
thing1 : 'thing',
thing2 : 'thing'
},
{
thing1 : 'thing',
thing2 : 'thing'
}
]
}
而不是你所做的工作。
myobj.rows[count].thing1 = 'thing';
myobj.rows[count].thing2 = 'thing
答案 2 :(得分:0)
“row”不是数组,它是一个对象(因为它周围有{})
您应该使用:
myobj.row1.thing1 = 'thing'
如果你想使用数组,你的对象应该是:
var myobj = {
row : [{
thing1 : 'thing',
thing2 : 'thing'
},
{
thing1 : 'thing',
thing2 : 'thing'
}]
}
希望它有所帮助。