2013-12-13 44 views
0

我想動態地爲for循環的每一次迭代使用我作爲對象名稱的一部分構建一個對象。基於下面的例子,我想要19個名稱爲obj0,obj1,obj2 ... obj18的對象。建立循環的對象用javascript

所以我有一個長的數組:

console.log(foo.length); // 19 

    for (var i = 0; i < foo.length; i++) { 
     var bar+i = {}; 
    }; 
    console.log(bar1); 
    console.log(bar2); 
    // ... 
    console.log(bar18); 

我想不通爲「var bar+i = {};」正確的語法,這顯然是行不通的。

編輯 我真正需要的對象,因爲我在構建以D3.js中使用的數據需要被許多對象

+3

也許你應該創建一個** **陣列。 – Pointy

+1

這是否有任何理由需要成爲全球?或不在數組中? – woolstar

回答

2

除非bar{i}是一個數組值/對象屬性本身要做到這一點的唯一方法是將其綁定到窗口或根對象。

window[bar+i] = {}; 

或根對象

this[bar+i] = {}; 

好得多其綁定到一個數組/對象本身雖然而不是無謂地結合到根/窗口。

var array = []; 

array[bar+i] = {}; 
+1

Downvote究竟是什麼? –

+0

綁定到一個數組正是我需要做的,你的第三個註釋只是做了一個小小的改變:array [「bar」+ i] = {}; – Bwyss

2

有一些黑客你如何做到這一點的數組。不過我建議你,而不是使用這種方法,你要使用數組:

console.log(foo.length); // 19 

var variables = []; 

for (var i = 0; i < foo.length; i++) { 
    variables[i] = {}; 
}; 
console.log(variables[0]); 
console.log(variables[1]); 
// ... 
console.log(variables[18]); 
+0

他不必使用數組。他可以用一個物體來代替......但是,其餘的都是正確的。 –

+0

從文字('[]')創建一個數組比'new Array()'快。 – Pavlo

+0

@MarioCesar更新了我的答案 – RononDex

2

您不能創建像這樣的變量。

你可以做的是增加全球範圍內,它可以作爲變量使用的屬性:

for (var i = 0; i < foo.length; i++) { 
    window['bar'+i ] = {}; 
}; 

或使用另一個對象持有的一切:

var container = {}; 
for (var i = 0; i < foo.length; i++) { 
    container['bar'+i] = {}; 
}; 
+0

+1爲「對象而不是陣列」的方法 –

0

你可以使用eval:

eval('var bar'+i+' = {};'); 

但是,真的,你不應該這樣做,除非你知道你肯定不能這樣做,呃方式。

+1

這個答案是正確的,但它有點像,「嗯,你可以通過穿上力量一環來實現,但請不要因爲MORDOR。」 – Pointy

+0

@Pointy因爲MORDOR會幫你嗎? – pvgoran

1

您不能動態寫變量名,但你可以做同樣的對象屬性:

console.log(foo.length); // 19 

var obj = {}; 

for (var i = 0; i < foo.length; i++) { 
    obj[ 'bar' + i ] = {}; 
}; 

console.log(obj.bar1); 
console.log(obj.bar2); 
// ... 
console.log(obj.bar18);