[英]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
對象是如何工作的,但是如果它包含兩個名為name
和type
鍵作為對象,則實際上不能對其進行數字迭代,因此它沒有length
屬性。 因此,您可能會在此處收到錯誤消息。 假設它實際上是一個包含嵌套對象的數組,這些對象包含type
和name
,則可以使用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.