使用javascript在for循环中构建对象

时间:2013-12-13 15:02:19

标签: javascript

我正在尝试使用i作为对象名称的一部分,为for循环的每次迭代动态构建一个对象。根据下面的例子,我想要19个名字对象:obj0,obj1,obj2 ... obj18。

所以我有一个长度为的数组:

    console.log(foo.length); // 19

    for (var i = 0; i < foo.length; i++) {
        var bar+i  = {}; 
    };
    console.log(bar1);
    console.log(bar2);
    // ...
    console.log(bar18); 

我无法弄清楚“var bar+i = {};”的正确语法,显然它不起作用。

修改 我真的需要对象,因为我正在构建要在D3.js中使用的数据,这些数据需要是许多对象的数组

5 个答案:

答案 0 :(得分:2)

有一些黑客如何实现这一目标。但是我建议您使用数组而不是您尝试使用的方法:

 console.log(foo.length); // 19

 var variables = [];

 for (var i = 0; i < foo.length; i++) {
    variables[i]  = {}; 
 };
 console.log(variables[0]);
 console.log(variables[1]);
 // ...
 console.log(variables[18]); 

答案 1 :(得分:2)

除非bar{i}是数组值/对象属性本身,否则执行此操作的唯一方法是将其绑定到窗口或根对象。

window[bar+i] = {};

或根对象

this[bar+i] = {};

将它绑定到数组/对象本身更好,而不是无意义地绑定到根/窗口。

var array = [];

array[bar+i] = {};

答案 2 :(得分:2)

你无法创建这样的变量。

您可以做的是添加全局范围的属性,您可以将其用作变量:

for (var i = 0; i < foo.length; i++) {
  window['bar'+i ] = {}; 
};

或使用其他对象来保存所有内容:

var container = {};
for (var i = 0; i < foo.length; i++) {
  container['bar'+i] = {}; 
};

答案 3 :(得分:1)

您无法动态编写变量名称,但您可以对对象属性执行相同的操作:

console.log(foo.length); // 19

var obj = {};

for (var i = 0; i < foo.length; i++) {
    obj[ 'bar' + i ] = {}; 
};

console.log(obj.bar1);
console.log(obj.bar2);
// ...
console.log(obj.bar18); 

答案 4 :(得分:0)

您可以使用eval:

eval('var bar'+i+' = {};');

但实际上,你不应该这样做,除非你确定你不能这样做。