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

Javascript : Adding Key Value pair literal giving undefined result

本文关键字:未定义 结果 添加 键值对 文字 Javascript      更新时间:2024-05-06

它在我的上一次测试中有效,但现在它给我带来了困难。。基本上我有这个代码:

    var myOBJ = {};
   for (var i = 0; i < myitems.length; i++) {
    myOBJ[i].itemtype = myitems.type;
    myOBJ[i].name = myitems.name;
   }

CCD_ 1内部是由于某种原因需要重写到另一个CCD_ 2的数据。但我有错误

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对象是如何工作的,但如果它包含两个名为nametype的键,那么你实际上就无法对它进行数字迭代,因为它是一个对象,所以它没有myitems0属性。所以你可能会出错。假设它实际上是一个包含typename的嵌套对象的数组,您可以很容易地对其进行迭代,并使用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 = {},但它将只是一个对象,每个属性都是object0,在语义上与Array相同,因此请使用Array。

myOBJ的各个元素最初是未定义的。

您必须创建一个新对象来包含属性:

myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name

或者,也许更有效的是,只需使用对象文字进行初始化:

myOBJ[i] = {
    itemtype: myitems.type,
    name: myitems.name
};

由于您似乎只使用数字索引,因此还应该考虑使用数组[],而不是变量myOBJ的对象{}