在for循环中创建对象。我错过了一点标记

时间:2012-04-17 18:49:27

标签: javascript

我想将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

非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

var obj+i = {}语法无效。

试试这个:

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

如果i == 1,则给出     mObj ['obj1'] = {};

哪个等于:

mObj.obj1

但是在动态构建时,你必须使用

mObj['obj' + i]

格式。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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;