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

また、というプロパティを作成したい場合は、notrow1を使用する必要があります)["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';
}
于 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 に答える