javascript - 使用数组中的名称创建新的(全局)对象

时间:2015-10-28 07:29:45

标签: javascript arrays

我正在尝试使用数组中的名称创建新对象。 如果没有阵列,我会这样做:

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?什么错误的想法?

3 个答案:

答案 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] = {}; 
});