我正在尝试使用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中使用的数据,这些数据需要是许多对象的数组
答案 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+' = {};');
但实际上,你不应该这样做,除非你确定你不能这样做。