它适用于我的最后一次测试,但现在它给了我很多时间..基本上我有这个代码:
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
有人能说出我的遗失吗?
答案 0 :(得分:3)
您无法通过索引访问对象文字,您必须通过键访问它。
如果myOBJ
是一个数组,那么您可以通过索引访问它。或者,如果myOBJ
具有数字键,则代码可以正常工作。
如果先实例化每个对象,可以很容易地使每个键成为一个数字,然后通过一种伪索引访问每个对象。
myOBJ[i] = {};
这将输出如下内容:
{
1: {};
//etc.
}
但为什么不简单地让myOBJ
成为数组?
答案 1 :(得分:2)
你必须在你想要创建的每个元素中使用一个对象,所以基本上这样做:
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
,如下所示: / p>
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
});
}
答案 2 :(得分:1)
如果您只想将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
,它在语义上与数组相同,所以请改用数组。
答案 3 :(得分:0)
myOBJ
的个别元素最初未定义。
您必须创建一个新对象以包含属性:
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name
或者,或许更有效率,只需用对象文字初始化它:
myOBJ[i] = {
itemtype: myitems.type,
name: myitems.name
};
由于您似乎只使用数字索引,因此您还应考虑使用数组[]
而不是对象{}
作为变量myOBJ
。