0

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

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

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

任何想法我怎么能做到这一点?

4

3 回答 3

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]not .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';
}
于 2013-05-15T16:08:12.330 回答
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
于 2013-05-15T16:09:12.033 回答
0

“行”不是一个数组,它是一个对象(因为你有 {} 围绕它)

你应该使用:

myobj.row1.thing1 = 'thing'

如果你想使用数组,你的对象应该是:

var myobj = {
row : [{
        thing1 : 'thing',
        thing2 : 'thing'
    },
   {
        thing1 : 'thing',
        thing2 : 'thing'
    }]
}

希望能帮助到你。

于 2013-05-15T16:11:06.930 回答