2013-05-15 4 views
0

Я пытаюсь динамически динамически создавать объектный литерал. Поэтому я начинаю с пустым объектом:Динамически добавлять элементы в объект literal

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

Но это не работает. Я получаю a не может установить свойство неопределенной ошибки.

Любые идеи, как я могу это сделать?

+0

Ваша разметка, как это выглядит неправильно, это приведет к ошибке. '' '' должен быть ':' – epascarello

ответ

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

Вы treaying строку как массив, когда строки. Чтобы использовать динамическую строку, вам нужно поместить строку «строка» в скобки.

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 
0

"строка" не является массивом, то объект (потому что у вас есть {} вокруг него)

Вы должны использовать:

myobj.row1.thing1 = 'thing' 

Если вы хотите использовать массивы, они должны быть вашими объектами:

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

Надеюсь, это поможет.

Смежные вопросы