2010-09-14 45 views
4

我想创建一个新对象并为存储在某个json中的每个数组分配一些属性。我有这个主要工作除...在for-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 2010-09-14 17:21:05

+1

a = 0;一个++; a =新补充();在每次迭代中,您将设置为0,然后是1,然后是一个对象。那是怎么回事? – Ronald 2010-09-14 17:21:45

+0

我想为每个循环迭代创建一个新对象。我想我可以增加一个变量值并使用它来创建新的对象名称。这没有用。 – chromaloop 2010-09-14 21:14:58

回答

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 2010-09-14 18:10:32

1

您粘贴不看我的权利,在它的意义的代码似乎并没有挂在一起。

做这些三条线做的事:

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

你似乎做三件矛盾的事情了那里。我的猜测是,a意味着成为你不显示的外部事物的索引。

那么什么是

 sup2 

应该是,以补充某些关系()你早些时候?

+0

我在粘贴代码时犯了一些错误,然后为了便于理解而尝试进行概括。去显示它不支付代码空腹! =) – chromaloop 2010-09-14 18:08:44

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(); 
    }