繁体   English   中英

Javascript:添加键值对文字以提供未定义的结果

[英]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对象是如何工作的,但是如果它包含两个名为nametype键作为对象,则实际上不能对其进行数字迭代,因此它没有length属性。 因此,您可能会在此处收到错误消息。 假设它实际上是一个包含嵌套对象的数组,这些对象包含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 = {}但是它仍然只是一个对象,每个属性都是一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM