2010-09-14 1 views
4

Я хочу создать новый объект и назначить некоторые свойства для каждого массива, хранящегося в некотором json. У меня это в основном работает, кроме ...Создайте новый объект внутри цикла in-loop

for (var i in json) { 

      a = 0; 
      a++; 
      a = new Object(); 

      for (var key in json[i]) { 
       var Key = key; 
       var Value = json[i][key]; 
       a[Key] = Value; 
      } 
      a.outputProperties(); 
     } 

Когда я выдаю свойства объекта, все не определено.

Если я создаю отдельный объект за пределами цикла и присваиваю ему свойства, он, похоже, работает нормально, за исключением того, что первый набор свойств будет перезаписан следующим. Не знаю, почему я не смог бы создавать объекты и назначать свойства внутри цикла динамически.

+0

Вы должны уметь. Возможно, нам нужно увидеть больше кода (например, откуда берется 'sup2'?). – palswim

+1

a = 0; A ++; a = новое дополнение(); На каждой итерации вы устанавливаете значение 0, затем 1, а затем на объект. Что с этим? – Ronald

+0

Я хотел создать новый объект для каждой итерации цикла. Я думал, что могу увеличить значение переменной и использовать ее для создания нового имени объекта. Это не сработало. – chromaloop

ответ

1

Ответ Дэйва Смита был очень близок к тому, что мне нужно, но он не создавал новые объекты внутри цикла. Вот мой обновленный код, при условии, что желаемый результат:

for (var i in json) { 
      theGoods["obj"+i] = new Object(); 
      for (var key in json[i]) { 
       theGoods["obj"+i][key] = json[i][key]; 
      } 
      theGoods["obj"+i].outputProperties(); 
     } 

Каждый новый объект теперь хранится в массиве, theGoods []; Теперь я могу ссылаться на этот объект, написав что-то вроде: theGoods["obj2"].someMethod();

3

Вы никогда не задавали какие-либо свойства a. Вы только что установили свойства sup2. На стороне записки у вас есть другие ненужные вещи там как var Key = key; Попробуйте это:

for (var i in json) { 
    var a = new supplement(); 
    for (var key in json[i]) { 
     a[key] = json[i][key]; 
    } 
    a.outputProperties(); 
} 
+0

Спасибо, это сделал трюк! – chromaloop

1

вставленный код не смотрит прямо на меня, в смысле этого слова, кажется, не болтаться вместе.

Что делать эти три линии сделать:

 a = 0; 
    a++; 
    a = new supplement(); 

Вы, кажется, сделать три противоречивые вещи с там. Я предполагаю, что a должен быть индексом для какой-то внешней вещи, которую вы не показываете.

Тогда что

 sup2 

должно быть, какое-то отношение к дополнению() вы сделали раньше?

+0

Я сделал некоторые ошибки, когда вставил код, а затем попытался обобщить для удобства понимания. Идет, чтобы показать, что он не платит за код на пустой желудок! знак равно – chromaloop

0
for (var i in json) { 

     a = new supplement(); 

     for (var key in json[i]) { 
      var Value = json[i][key]; 
      a[Key] = Value; 
     } 
     a.outputProperties(); 
    }