我正在尝试通过循环为数组中的每个项创建一个新对象。对象的名称应该基于数组的键。
所以对于这个数组:
var arr = new Array(
"some value",
"some other value",
"a third value"
);
会产生三个对象:
alert(object1.value);
alert(object2.value);
alert(object3.value);
我到目前为止的代码(但不起作用)是:
// Object
function fooBar(value) {
this.value = value;
...
}
// Loop
var len = arr.length;
for (var i = 0; i < len; i++) {
var objectName = object + i;
var objectName = new fooBar(arr[i]);
}
我要求的是否有意义?
答案 0 :(得分:8)
您还必须制作一个对象数组
var objs = new Array();
for(var i = 0; i < len; i++) {
objs[i] = new fooBar(arr[i]);
}
alert(objs[0].value);
答案 1 :(得分:5)
您可以映射您的数组:
var arr = new Array(
"some value",
"some other value",
"a third value"
);
var fooBars = arr.map(function(x) { return new fooBar(x); });
然后您可以访问每个值:
alert(fooBars[0].value);
// etc.
或一次处理所有内容:
fooBars.forEach(function (foo) { alert(foo.value); });
答案 2 :(得分:4)
你所要求的是有道理的,但不应该是你如何构建JavaScript。
从技术上讲,有一种方法可以创建具有动态构建名称的变量,但是你不应该使用它,因为它很慢,如果用户指定数组中的内容,它就不安全了,并且需要一对夫妇使用该功能多年来,所以你的旧东西可能会在未来的浏览器中破裂。
与此同时,您可以轻松地执行以下操作:
var obj = {},
arr = [ "one", "two", "three" ],
i = 0,
len = arr.length,
val = "",
name = "";
for (; i < len; i += 1) {
name = "item" + i;
val = arr[i];
obj[name] = val;
}
现在您可以致电obj.item1; // "two"
如果你真的很绝望,你可以使用window
作为obj
,所以当你在全球范围内写东西时,你可以写item0; // "one"
但这真的不是'一个好主意,有几个原因(可读性,可维护性,覆盖别人财产的可能性等)。
答案 3 :(得分:3)
如果你真的想要名为so的变量,这是一个解决方案
function fooBar(value) {
this.value = value;
}
var arr = new Array(
"some value",
"some other value",
"a third value"
);
(function(context) {
for ( var i = 0; i < arr.length; i++) {
var key = 'object' + ( i + 1 );
this[ key ] = new fooBar( arr[ i ] );
}
}(window));
alert(object1.value);
alert(object2.value);
alert(object3.value);
如果您不想要全局变量object1
...只需将关键字window
替换为this
,它就会为当前范围生成局部变量。