在 for-in 循环中创建新对象

4

我想创建一个新的对象,并为json中存储的每个数组分配一些属性。除了...,我已经基本实现了这个功能。

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

当我输出对象属性时,所有内容都是未定义的。
如果我在循环外创建一个单独的对象并将属性分配给它,似乎可以正常工作,但第一组属性会被后面的属性覆盖。不确定为什么不能在循环内动态创建对象并赋值属性。

你应该能够做到。我们可能需要查看更多的代码(例如,sup2来自哪里?)。 - palswim
1
a = 0; a++; a = new supplement(); 在每次迭代中,您将a设置为0,然后1,然后是一个对象。这是怎么回事? - Ronald
我想在每次循环迭代中创建一个新对象。我以为可以递增变量值并使用它来创建新的对象名称,但这行不通。 - chromaloop
这个方法可行:theGoods["obj"+i] = new Object(); - chromaloop
4个回答

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

1

你粘贴的代码看起来不对,它似乎不能很好地运行。

这三行代码是做什么用的:

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

你似乎在使用一个变量做了三件矛盾的事情。我猜测这个变量a是用来作为某个外部未显示的东西的索引。

那么这个变量到底是什么呢?

     sup2

这个应该和你之前写的 supplement() 有关系吧?


当我将代码粘贴并尝试进行概括以便更易理解时,我犯了一些错误。这表明空腹编程是不明智的!=) - chromaloop

1
Dave Smith的回答非常接近我所需的,但它没有在循环内创建新对象。这是我的更新代码,提供了所需的结果:
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();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接