2012-04-19 52 views
1

我幾乎在這裏,但似乎無法按計劃得到此功能。創建動態對象到父對象並分配鍵和值?

我有兩個數組:keyArray和ValArray;

我想要做的是讓函數傳遞兩個參數(keyArr,valArr)。在這個函數中,一個父對象被聲明並且一個(for-loop)循環參數的長度(在本例中爲「keyArr」)根據傳入參數的長度創建新對象。然後,爲新創建的對象分配鍵和值。

問題是我能夠創建父對象「mObj」,並將子對象創建爲「mObj」,但我只能將鍵和值分配給第一個子對象「obj0」而不是其餘的子對象對象正確。在代碼的結束,這是我想獲得:

enter code heremObj.obj0.firstname = John; 
mObj.obj0.lastname = superfly; 
mObj.obj0.email = "[email protected]"; 

mObj.obj1.firstname = John; 
mObj.obj1.lastname = superfly; 
mObj.obj1.email = "[email protected]"; 

mObj.obj2.firstname = John; 
mObj.obj2.lastname = superfly; 
mObj.obj2.email = "[email protected]"; 

這是我的代碼:

var keyArr = ["firstname","lastname","email"]; 
var valArr = ["John","Superfly","[email protected]"]; 

function test(keys,vals) // FUNCTION TEST ACCEPTS TWO ARGS 
{ 
    var mObj = {}; // PARENT OBJECT 
    var len = (keys.length); //ARGUMENT KEY'S LENGTH 

    for(var i=0; i<len; i++) 
    { 
     mObj["obj" + i] = {}; //CHILDREN OBJECTS ARE CREATED TO PARENT "mObj" OBJECT 
     mObj["obj" + i][keys[i]] = vals[i]; //KEYS AND VALUES ARE ASSIGNED HERE 
    } 

     alert(mObj.obj1.firstname); // CURRENTLY RETURNS "UNDEFINED" 
} 

test(keyArr,valArr); 

任何深入瞭解這會非常可以理解的。 謝謝。

+0

我從你的代碼中得不到的是你最終得到3組相同的數據。我根本看不到製作3套的限制。 – Joseph 2012-04-19 21:25:09

回答

2

看起來像這樣是你需要的。此代碼將創建與keyArrvalArr數組長度一樣多的子對象。雖然不知道你爲什麼需要它。

var keyArr = ["firstname", "lastname", "email"]; 
var valArr = ["John", "Superfly", "[email protected]"]; 

function test(keys, vals) { 
    var mObj = {}, 
     i, j, len = keys.length; 

    for (i = 0; i < len; i++) { 
     mObj["obj" + i] = {}; 
     for (j = 0; j < len; j++) { 
      mObj["obj" + i][keys[j]] = vals[j]; 
     } 
    } 

    alert(mObj.obj1.firstname); 
} 

console.log(test(keyArr, valArr));​ 
+0

非常感謝。你釘了它。我只循環一次,沒想到我需要迭代兩次。我真的很感激這個......太棒了 – Combustion007 2012-04-19 23:24:49