26.03.2014, 12:53
|
Новичок на форуме
|
|
Регистрация: 29.08.2013
Сообщений: 7
|
|
Динамический объект в объекте
Здраствуйте.
Подскажите, пожалуйста, как цикле задать свойство динамически созданного объекта, который лежит в другом объекте.
/*
* Пример свойства объекта в объекте
* Нужно динамически создать такие же объекты: obj_1, obj_2 .... obj_10
*/
var objs = {
obj_100: {
id: 100
}
/*
* Создаём сначала сам объект.
* А вот свойство создать не удаётся
*/
for (var i=1; i<=10; i++) {
var name = "objs.obj_" + i;
[name].id = i+1; /* ТУТ ВСЯ ЗАГВОЗДКА */
}
alert(ships.ship_1.id);
Не понимаю как синтактически правильно написать.
Идея сделать это в два цикла меня посещала, но всё-таки хотелось бы понять, как это сделать именно одним циклом.
Спасибо за дельный ответ.
|
|
26.03.2014, 13:11
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
for (var i=1; i<=10; i++) {
var name = "obj_" + i;
objs[name] = {};
objs[name].id = i+1;
}
__________________
29375, 35
|
|
26.03.2014, 13:23
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
/*
* Пример свойства объекта в объекте
* Нужно динамически создать такие же объекты: obj_1, obj_2 .... obj_10
*/
var objs = {
obj_100: {
id: 100
}
}
/*
* Создаём сначала сам объект.
* А вот свойство создать не удаётся
*/
for (var i = 1; i <= 10; i++) {
var name = "objs.obj_" + i;
objs[name] = objs[name] || {};
objs[name].id = i + 1; /* ТУТ ВСЯ ЗАГВОЗДКА */
}
console.dir(objs);
|
|
26.03.2014, 15:55
|
Новичок на форуме
|
|
Регистрация: 29.08.2013
Сообщений: 7
|
|
Спасибо всё заработало
Спасибо, очень помогли.
Пожскажите, пожалуйста, еще как перебрать все элементы массива id, если этот массив находится в объекте obj, который в свою очередь находится в объекте objs.
objs[name].id =[ ];
Последний раз редактировалось Аарон, 26.03.2014 в 16:09.
|
|
26.03.2014, 16:31
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от Аарон
|
Спасибо, очень помогли.
Пожскажите, пожалуйста, еще как перебрать все элементы массива id, если этот массив находится в объекте obj, который в свою очередь находится в объекте objs.
objs[name].id =[ ];
|
Циклом:
var arr = objs[name].id;
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
forEach:
var arr = objs[name].id;
arr.forEach(function(elem, i, arr) {
console.log(elem);
});
Последний раз редактировалось jsnb, 26.03.2014 в 16:33.
|
|
26.03.2014, 16:56
|
Новичок на форуме
|
|
Регистрация: 29.08.2013
Сообщений: 7
|
|
Сообщение от jsnb
|
Циклом:
var arr = objs[name].id;
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
forEach:
var arr = objs[name].id;
arr.forEach(function(elem, i, arr) {
console.log(elem);
});
|
Мне кажется Вы не поняли вопроса.
objs = {
obj_1: {
id: [1, 2, 3]
}
obj_2: {
id: [10, 20, 30]
}
......
obj_10: {
id: [100, 200, 300]
}
}
Есть объект, в нем другие объекты, а у каждого объекта есть свойство-массив.
Нужно циклом перебрать все элементы массивов во всех объектах.
|
|
26.03.2014, 17:08
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
for(var i = 1; i <= 10; i++) {
if (!objs['obj_'+i]) continue;
var arr = objs['obj_'+i].id;
arr.forEach(function(elem, i, arr) {
console.log(elem);
});
}
|
|
26.03.2014, 18:28
|
Новичок на форуме
|
|
Регистрация: 29.08.2013
Сообщений: 7
|
|
Не моглы бы Вы через for написать вместо forEach?
|
|
26.03.2014, 18:32
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
for(var i = 1; i <= 10; i++) {
if (!objs['obj_'+i]) continue;
var arr = objs['obj_'+i].id;
for(var j = 0, l = arr.length; j < l; j++)
console.log(arr[j]);
}
}
__________________
29375, 35
|
|
26.03.2014, 18:47
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от Aetae
|
for(var j = 0, l = arr.length; j < l; j++)
|
Кстати, а почему так условие записано? Это на что-то влияет или просто стиль?
UPDATE:
Хм, действительно на большом количестве итераций так есть выигрыш в скорости.
Последний раз редактировалось jsnb, 26.03.2014 в 19:03.
|
|
|
|