1

もうすぐですが、この機能を計画どおりに実行できないようです。

keyArrayとValArrayの2つの配列があります。

私がやろうとしているのは、関数に2つの引数(keyArr、valArr)を渡させることです。この関数内で、親オブジェクトが宣言され、(forループ)が渡された引数の長さ(この場合は「keyArr」)をループして、渡された引数の長さに応じて新しいオブジェクトを作成します。次に、新しく作成されたオブジェクトにキーと値が割り当てられます。

問題は、親オブジェクト「mObj」と子オブジェクトを「mObj」に作成できますが、キーと値を最初の子オブジェクト「obj0」にしか割り当てることができず、残りの子オブジェクトを正しく作成できないことです。コードの最後に、これが私が取得したいものです:

enter code heremObj.obj0.firstname = John;
mObj.obj0.lastname = superfly;
mObj.obj0.email = "john.superfly@yahoo.com";

mObj.obj1.firstname = John;
mObj.obj1.lastname = superfly;
mObj.obj1.email = "john.superfly@yahoo.com";

mObj.obj2.firstname = John;
mObj.obj2.lastname = superfly;
mObj.obj2.email = "john.superfly@yahoo.com";

これは私のコードです:

 var keyArr = ["firstname","lastname","email"];
 var valArr = ["John","Superfly","jsuperfly@yahoo.com"];

 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);

これについての洞察をいただければ幸いです。ありがとうございました。

4

1 に答える 1

2

このようにあなたが必要なものです。keyArrこのコードは、valArr配列の長さと同じ数の子オブジェクトを作成します。なぜそれが必要になるのか分かりませんが。

var keyArr = ["firstname", "lastname", "email"];
var valArr = ["John", "Superfly", "jsuperfly@yahoo.com"];

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) );​
于 2012-04-19T21:30:00.540 に答える