Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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);

Не понимаю как синтактически правильно написать.
Идея сделать это в два цикла меня посещала, но всё-таки хотелось бы понять, как это сделать именно одним циклом.

Спасибо за дельный ответ.
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2014, 13:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

for (var i=1; i<=10; i++) {
    var name = "obj_" + i;
    objs[name] = {};
    objs[name].id = i+1;  
}
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2014, 13:23
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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);
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2014, 15:55
Новичок на форуме
Отправить личное сообщение для Аарон Посмотреть профиль Найти все сообщения от Аарон
 
Регистрация: 29.08.2013
Сообщений: 7

Спасибо всё заработало
Спасибо, очень помогли.
Пожскажите, пожалуйста, еще как перебрать все элементы массива id, если этот массив находится в объекте obj, который в свою очередь находится в объекте objs.
objs[name].id =[ ];

Последний раз редактировалось Аарон, 26.03.2014 в 16:09.
Ответить с цитированием
  #5 (permalink)  
Старый 26.03.2014, 16:31
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 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]
   }
}

Есть объект, в нем другие объекты, а у каждого объекта есть свойство-массив.
Нужно циклом перебрать все элементы массивов во всех объектах.
Ответить с цитированием
  #7 (permalink)  
Старый 26.03.2014, 17:08
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 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);
  });
}
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2014, 18:28
Новичок на форуме
Отправить личное сообщение для Аарон Посмотреть профиль Найти все сообщения от Аарон
 
Регистрация: 29.08.2013
Сообщений: 7

Не моглы бы Вы через for написать вместо forEach?
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2014, 18:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

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
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2014, 18:47
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Aetae Посмотреть сообщение
for(var j = 0, l = arr.length; j < l; j++)
Кстати, а почему так условие записано? Это на что-то влияет или просто стиль?

UPDATE:
Хм, действительно на большом количестве итераций так есть выигрыш в скорости.

Последний раз редактировалось jsnb, 26.03.2014 в 19:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать в объекте ссылку на объект - контейнер? hrustbb Events/DOM/Window 3 17.12.2013 18:43
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
как добавить свойство объекта в объект в объекте ? %) mitiya Общие вопросы Javascript 1 07.10.2012 14:46
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45