我想创建一个新对象,并为一些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();
}
当我输出对象属性时,一切都是未定义的。
如果我在循环外创建一个单独的对象并为其分配属性,它似乎工作正常,除了第一组属性被以下内容覆盖。不知道为什么我无法动态创建对象并在循环内分配属性。
答案 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();
}