我正在尝试使用数组中的名称创建新对象。 如果没有阵列,我会这样做:
var object_bruno = new Object();
var object_carlos = new Object();
var object_luci = new Object();
所以我最终会得到3个新对象。但是为什么我们不会用循环来做到这一点,这使得以后更容易添加更多的对象。所以我尝试了:
// an array full of object names
var obj_arr = [ "object_bruno", "object_carlos", "object_luci"];
// Method one:
for (x in obj_arr) {
alert(obj_arr[x]); // right names shown
var obj_arr[x] = new Object(); //syntax error, dosent work??
};
// Method two:
obj_arr.forEach(function(func_name) {
alert(func_name); // right names
var func_name = new Object(); // no objects are created ???
});
基本上我更喜欢使用方法二。我喜欢它,因为我可以用同样的方式填写它们吗? hopefuly?什么错误的想法?
答案 0 :(得分:1)
您可以循环遍历数组并为每个项目分配new Object
,如下所示:
for (var i = 0, l = obj_arr.length; i < l; i++) {
obj_arr[i] = {};
}
<强>更新强>
您也可以通过将属性应用于global
对象来实现此目的,例如window
:
var people = [ "object_bruno", "object_carlos", "object_luci"];
for (var i = 0, l = people.length; i < l; i++) {
global[people[i]] = {};
}
使用此解决方案可使对象成为全局对象,因此您可以像object_bruno
一样使用它们。
另一个改进可以是ECMAScript 2015 computed propertiey names
的使用:
var people = [ "bruno", "carlos", "luci"], prefix = 'object_';
for (var i = 0, l = people.length; i < l; i++) {
global[prefix + people[i]] = {};
}
这允许有更多有意义的数组。
注意,global
可以是浏览器中的window
对象,也可以是NodeJS中的global
对象,也可以是其他环境中的其他对象。
答案 1 :(得分:0)
因为您正在通过声明
来创建新变量obj_arr.forEach(function(func_name) {
alert(func_name); // right names
var func_name = new Object(); // no objects are created ???
});
试试这个
obj_arr.forEach(function(func_name) {
alert(func_name); // right names
func_name = new Object(); // no objects are created ???
});
答案 2 :(得分:0)
var obj_arr = [ "object_bruno", "object_carlos", "object_luci"];
obj_arr.forEach(function(func_name, index, arr) {
arr[index] = {};
});