Просмотр полной версии : Динамический объект в объекте
Здраствуйте.
Подскажите, пожалуйста, как цикле задать свойство динамически созданного объекта, который лежит в другом объекте. :)
/*
* Пример свойства объекта в объекте
* Нужно динамически создать такие же объекты: 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);
Не понимаю как синтактически правильно написать.
Идея сделать это в два цикла меня посещала, но всё-таки хотелось бы понять, как это сделать именно одним циклом.
Спасибо за дельный ответ.
for (var i=1; i<=10; i++) {
var name = "obj_" + i;
objs[name] = {};
objs[name].id = i+1;
}
Vlasenko Fedor
26.03.2014, 13:23
/*
* Пример свойства объекта в объекте
* Нужно динамически создать такие же объекты: 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);
Спасибо, очень помогли.
Пожскажите, пожалуйста, еще как перебрать все элементы массива id, если этот массив находится в объекте obj, который в свою очередь находится в объекте objs.
objs[name].id =[ ];
Спасибо, очень помогли.
Пожскажите, пожалуйста, еще как перебрать все элементы массива 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);
});
Циклом:
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]
}
}
Есть объект, в нем другие объекты, а у каждого объекта есть свойство-массив.
Нужно циклом перебрать все элементы массивов во всех объектах.
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);
});
}
Не моглы бы Вы через for написать вместо forEach?
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]);
}
}
for(var j = 0, l = arr.length; j < l; j++)
Кстати, а почему так условие записано? Это на что-то влияет или просто стиль?
UPDATE:
Хм, действительно на большом количестве итераций так есть выигрыш в скорости.
Хм, действительно на большом количестве итераций так есть выигрыш в скорости.
На самом деле минимальный, в отличие от выигрыша по сравнению с forEach.:) Так что скорее именно привычка и стиль.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot