簡體   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