簡體   English   中英

JavaScript-使用數組名稱創建新的(全局)對象

[英]javascript - create new (global) objects with names from array

我試圖用數組名稱創建新對象。 沒有數組,我會做:

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 ???
});

基本上,我更喜歡使用方法二。 我喜歡它,因為我可以用同樣的方法加滿它們? 充滿希望嗎? 任何想法出了什么問題嗎?

您可以在數組上循環並為每個項目分配一個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對象,或者在其他環境中也可以是其他對象。

因為您通過聲明來創建新變量

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 ???
    });
var obj_arr = [ "object_bruno", "object_carlos", "object_luci"];

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM