2012-04-17 57 views
0

我想有一個for循環創建對象作爲父對象的子對象。通常情況下,我想聲明的對象,而無需使用for循環是這樣的:在for循環中創建對象。我遺漏了一點

var mObj = {}; 
mObj.obj1 = {}; 
mObj.obj2 = {}; 
mObj.obj3 = {}; 
mObj.obj3.firstname = "john"; 
mObj.obj3.lastname = "superfly"; 

現在可以說,我想使用一個for循環來創建一個父對象「MOBJ」的子對象。

這是我錯了:

var mArr = ["firstname","lastname","email"]; // This array holds the keys for the objects 

var mObj = {}; 

var len = (mArr.length); 

for(var i=0; i<len; i++){ 

     var obj+i = {} 
     mObj = obj+i; 
     mObj.obj + i.mArr[i] = "" 

    } 

所以這樣做的結果將是:

mObj.obj1.firstname = ""; 
mObj.obj2.lastname = ""; 
mObj.obj3.email = ""; 

我似乎無法說出那個被內創建與計數器對象循環如:

obj1 
obj2 
obj3 

任何幫助將不勝感激。

謝謝。

回答

1

var obj+i = {}是無效的語法。

嘗試這種情況:

mObj['obj' + i] = {}; 

如果我== 1,這給 MOBJ [ 'OBJ1'] = {};

這是equiavlent到:

mObj.obj1 

但是動態地構造時,你必須使用

mObj['obj' + i] 

格式。

+0

非常感謝。經過一些手肘的潤滑脂,我得到了它。我花了幾個小時嘗試一些事情。語法拋棄了我。 – Combustion007 2012-04-17 19:49:23

0

您需要使用括號語法來分配動態變量。例如:

var sampleObj = {}; 

for(var j = 0; j < 3; j++) 
{ 
    sampleObj["obj" + j] = { test: j }; 
} 

這將產生以下對象:

{ 
    "obj1" : { test: 1 }, 
    "obj2" : { test: 2 }, 
    "obj3" : { test: 3 } 
} 

運行循環再之後,你可以有效地使用該語句:

var testVal = sampleObj.obj1.test; 
+0

var keyArr = [「firstname」,「lastname」,「email」] var valArr = [「John」,「Superfly」,「[email protected]」]; mObj = {}, len =(mArr.length), i = 0; for(; i Combustion007 2012-04-17 19:50:29

1
var mArr = ["firstname","lastname","email"], 
    mObj = {}, 
    len = (mArr.length), 
    i = 0; 

for(; i<len; i++){ 
     myObj['obj' + i] = {} 
     myObj['obj' + i].mArr[i] = "" 
    }