Javascript:添加键值对文字给出未定义的结果

时间:2015-02-25 14:40:22

标签: javascript jquery

它适用于我的最后一次测试,但现在它给了我很多时间..基本上我有这个代码:

    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

有人能说出我的遗失吗?

4 个答案:

答案 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对象是如何工作的,但如果它包含两个名为nametype的密钥,你就无法以数字方式对其进行迭代。 ,作为一个对象,因此它没有length属性。所以你可能会在那里得到一个错误。假设它实际上是一个包含typename的嵌套对象的数组,您可以轻松地迭代它,使用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