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 obj+i = {}是无效的语法。

尝试这个:

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

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

这相当于:

mObj.obj1

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

mObj['obj' + i]

格式化。

于 2012-04-17T18:52:25.920 回答
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 回答
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 回答