在for-in-loop中创建新对象

时间:2010-09-14 17:13:23

标签: javascript oop object properties for-in-loop

我想创建一个新对象,并为一些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();
        }

当我输出对象属性时,一切都是未定义的。

如果我在循环外创建一个单独的对象并为其分配属性,它似乎工作正常,除了第一组属性被以下内容覆盖。不知道为什么我无法动态创建对象并在循环内分配属性。

4 个答案:

答案 0 :(得分: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 :(得分:1)

你粘贴的代码对我来说看起来并不正确,因为它似乎并没有挂在一起。

这三条线做了什么:

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

你似乎在那里做了三件相互矛盾的事情。我的猜测是,这意味着要成为你未展示的一些外部事物的索引。

那是什么

     sup2

应该是,你之前做的补充()的一些关系?

答案 2 :(得分: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 :(得分: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();
    }