动态添加元素到对象文字

时间:2013-05-15 16:06:33

标签: javascript

我正在尝试动态动态创建对象文字。所以我从一个空对象开始:

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

但这似乎不起作用。我得到一个无法设置未定义错误的属性。

我有什么想法可以做到这一点吗?

3 个答案:

答案 0 :(得分:4)

您必须先为myobj.row提供一个值(以及一个可以接受属性的数据,例如数组或对象),然后才能为myobj.row[count]提供一个值(myobj.row[count]必须在myobj.row[count].thing1myobj.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'
    }]
}

希望它有所帮助。