0

親オブジェクトの子として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 = "";

次のように、forループ内で作成されているカウンターでオブジェクトに名前を付けることができないようです。

obj1
obj2
obj3

どんな助けでも大歓迎です。

ありがとう。

4

3 に答える 3

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

 for(; i<len; i++){
      myObj['obj' + i] = {}
      myObj['obj' + i].mArr[i] = ""
  }
于 2012-04-17T18:53:16.107 に答える
1

var obj+i = {}無効な構文です。

これを試して:

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

i == 1の場合、これによりmObj ['obj1']={};が得られます。

これは次のものと同等です:

mObj.obj1

ただし、動的に構築する場合は、

mObj['obj' + i]

フォーマット。

于 2012-04-17T18:52:25.920 に答える
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;
于 2012-04-17T18:52:36.170 に答える