2015-10-28 22 views
0

我想用數組創建新的對象。 沒有一個數組我會做:javascript - 用數組創建新的(全局)對象

var object_bruno = new Object(); 
var object_carlos = new Object(); 
var object_luci = new Object(); 

所以我會在最後3級新的對象。但是爲什麼我們不能用循環來做到這一點,這使得以後更容易添加更多的對象。所以我ttried:

//  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

請添加代碼提琴..這是非常有助於人們理解您的問題 – vinodh

+0

https://jsfiddle.net/krL4fxuL/2/ – derdigge

回答

1

您可以在陣列上只是循環和分配new Object到每個項目,像這樣:

for (var i = 0, l = obj_arr.length; i < l; i++) { 
    obj_arr[i] = {}; 
} 

UPDATE

您還可以通過應用性能的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對象或global的NodeJS對象,或者是別的東西在其他環境中。

+0

感謝您的快速答覆!您的代碼導致「ReferenceError:object_bruno未定義」,我嘗試如下:https://jsfiddle.net/krL4fxuL/ – derdigge

+0

嘗試更新的解決方案,'global'替換爲'window'。 –

+0

這裏是小提琴:https://jsfiddle.net/krL4fxuL/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 ??? 
    }); 
0
var obj_arr = [ "object_bruno", "object_carlos", "object_luci"]; 

obj_arr.forEach(function(func_name, index, arr) { 
    arr[index] = {}; 
});