[英]Javascript : Adding Key Value pair literal giving undefined result
它可以在我的最后一个测试上工作,但是现在给了我很多时间。
var myOBJ = {};
for (var i = 0; i < myitems.length; i++) {
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name;
}
在myitems
里面是出于某种原因我需要重写到另一个object
的数据。 但我有错误我有
Error: myOBJ[i] is undefined
谁能告诉我我错过了什么?
您不能按索引访问对象文字,必须按键访问它。
如果myOBJ
是一个数组,则可以按索引访问它。 或者,如果myOBJ
具有数字键,则您的代码将起作用。
您可以很容易地使每个键成为一个数字,然后,如果您首先实例化每个对象,则可以通过某种伪索引来访问每个对象。
myOBJ[i] = {};
这将输出类似:
{
1: {};
//etc.
}
但是,为什么不简单地使myOBJ
成为数组呢?
您必须在要尝试创建的每个元素中整合一个对象,因此基本上可以这样做:
var myOBJ = {};
for (var i = 0; i < myitems.length; i++) {
// Create a new object here.
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name;
}
而且由于无论如何都在数值上工作,因此最好将myOBJ
创建为数值数组:
var myOBJ = [];
现在,我不知道您的myitems
对象是如何工作的,但是如果它包含两个名为name
和type
键作为对象,则实际上不能对其进行数字迭代,因此它没有length
属性。 因此,您可能会在此处收到错误消息。 假设它实际上是一个包含嵌套对象的数组,这些对象包含type
和name
,则可以使用push()
轻松地对其进行迭代,以向该数组添加object literal
,如下所示:
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
// Create and push new object here.
myOBJ.push({
itemtype : myitems[i].type,
name : myitems[i]. name
});
}
如果你只是想从复制值myitems
到另一个对象myOBJ
,我建议你换myOBJ
一个Array
,创建内部环路一个临时对象和临时对象添加到您的MyObj中数组
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
var item = myitems[i];
var temp = {
'itemtype' : item.type,
'name' : item.name
};
myOBJ[i] = temp; // (or) myOBJ.push(temp);
}
您甚至可以保留myOBJ = {}
但是它仍然只是一个对象,每个属性都是一个Number
,在语义上与Array相同,因此请改用Array。
最初未定义myOBJ
各个元素。
您必须创建一个新对象来包含属性:
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name
或者,也许更有效地,只需使用对象文字对其进行初始化:
myOBJ[i] = {
itemtype: myitems.type,
name: myitems.name
};
由于您似乎只使用数字索引,因此还应该考虑使用数组[]
代替变量myOBJ
的对象{}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.