2013-02-26 45 views
1

我想做一個循環,自動創建數組併爲其賦值。 問題是如何自動生成數組本身。如何在javascript中自動生成數組?

for(var attGetter=1; attGetter <= num; attGetter++){ 
    var catesArray1 = new Array(); 

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){ 
     idOfInput = "cate"+chartGetter+"_series"+attGetterArray; 
     catesArray1.push($("#"+idOfInput).val()); 
    } 
} 

我希望循環自動生成陣列本身就像 catesArray1 catesArray2 catesArray3

等..

+0

'if'不是一個循環。不要試圖產生叫做'foo1','foo2','foo3',...的變量。改用數組'foo [i]'。 – melpomene 2013-02-26 03:34:25

+0

數組是否在全局命名空間 – 2013-02-26 03:35:29

+1

你需要一個二維數組,或者你想在變量中生成數組 – 2013-02-26 03:35:32

回答

2

您需要一個對象或數組來存放您希望創建的多個數組。也許你正在尋找的東西如下所示?

var arrayHolder = new Array(); 

    for(var attGetter=1; attGetter <= num; attGetter++){ 
    var catesArray = new Array(); 

    for(var attGetterArray=1; atttGetterArray <= series; attGetterArray++){ 
    idOfInput = "cate"+chartGetter+"_series"+attGetterArray; 
    catesArray.push($("#"+idOfInput).val()); 
    } 
    arrayHolder.push(catesArray); 
} 
+0

來解決問題的另一種方法,因此唯一的選擇是製作二維數組。我無法找到另一種自動生成數組的方法 – 2013-02-26 03:52:30

+0

如果您正在嘗試執行的操作,則無法使用循環計數器的值創建名稱引用的新數組。 – 2013-02-26 03:54:18

+0

是的,你可以看到這http://jsfiddle.net/farrukhsubhani/KudTe/2/您可以將它們使用eval – 2013-02-26 04:17:02

1

如果你想在陣列將在全局命名空間,你可以嘗試

window['catesArray' + attGetter] = []; 
... 
window['catesArray' + attGetter].push(...) 

否則您可以創建一個哈希對象並使用它來保存引用ce

var obj = {}; 
..... 
obj['catesArray' + attGetter] = []; 
..... 
obj['catesArray' + attGetter].push(...) 
+0

這種嘗試我的小提琴是給予他想要的東西OP的情況下, ,而不是他所需要的... – 2013-02-26 03:37:24

+0

是的,再次有多個答案處理使用二維數組解決問題。這是通過使用動態變量 – 2013-02-26 03:57:05

0

您應該將它們分配給一個對象。在這種情況下,使對象變量的第一個for循環之前持有的所有陣列:

var allArrays = {}; 

for(var attGetter=1; attGetter <= num; attGetter++){ 
    var currentArray = allArrays['catesArray' + attGetter] = new Array(); 

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){ 
     idOfInput = "cate"+chartGetter+"_series"+attGetterArray; 
     currentArray.push($("#"+idOfInput).val()); 
    } 
} 
1

在這種情況下,你必須創建一個從第一for

保存所有 cacatesArray■一個新的數組
var catesArrayContainer = new Array(); //<<<--------------------- 
for(var attGetter=1; attGetter <= num; attGetter++){ 
    var catesArray = new Array(); 

    for(var atttGetterArray=1; atttGetterArray <= series; attGetterArray++){ 
     idOfInput = "cate"+chartGetter+"_series"+attGetterArray; 
     catesArray.push($("#"+idOfInput).val()); 
    } 
    catesArrayContainer.push(catesArray); //<<<-------------------- 
} 

編輯:

這是因爲變量catesArray1的範圍是有限的。當循環進入下一次迭代時,catesArray1得到重新初始化,因此失去了所有先前存儲的值... 現在在我發佈的代碼中,我們將catesArray1的每個實例存儲在另一個數組中,並且您的值保留在for的一側環

+0

所以唯一的選擇是,二維數組。我無法找到另一種方式來自動生成陣列 – 2013-02-26 03:52:01

+0

正如有人提醒我,catesArray1的範圍並不侷限於for循環,但你是絕對正確的它被重新初始化,並失去它的價值 – 2013-02-26 03:52:11

+0

這就要看,怎麼辦你想完全實現? 從您發佈的問題,使用'2D array'聽起來很完美的解決方案 – AdityaParab 2013-02-26 03:55:40

1

您可以爲5個元素的4陣列,每個陣列

yourarray=[]; 
for (i = 0; i <4; i++) { 
    temparray=[]; 
    for (j = 0; j < 5; j++) { 
     temparray.push($('#'+whateverID+'_'+i+'_'+j)) //your values here 
    } 
yourarray.push(temparray); 
} 

檢查它this JSFiddle做這樣的事情。打開Chrome控制檯查看陣列

如果你想從指數

您可以用eval從字符串評估JavaScript,但我不會使用創建循環內陣列,除非有沒有其他的辦法。您可以在此Fiddle中看到上面和eval方法。打開Chrome控制檯查看陣列值 只是使用eval和2D陣列的比較 在運行此jsFiddle時在Chrome中打開控制檯,您將在此問題的上下文中看到eval和2darray的區別。

+0

遺憾宣佈不得不大量改變它從一個應用程序,使之簡單 – 2013-02-26 03:45:21

+0

這是無限循環 – AdityaParab 2013-02-26 03:45:35

+0

現在在小提琴排序 – 2013-02-26 03:52:17

0

而不是試圖創建&分配動態命名變量,如果你願意的話,我會想到更多arrayarray。換句話說,創建一個包含所有數組的數組,你想:

var collections = []; // Literal notation for creating an array in JS 

從這裏,它是使這個陣列中創建的每個值自己的陣列的一個問題:

var n = 10; // Total amount of arrays you want 
for (var i = 0; i < n; i++) { 
    var values = []; 
    // Have another loop that fills in the values array as expected 
    collections.push(values); // Each element at collections[i] is its own array. 
} 

如果你真的需要命名的元素,你可能會做一些非常相似的事情,而不是僅僅使用對象{},並用你創建的名字引用每個元素。

var collections = {}; // Literal notation for an object in JS 
var n = 10; // Total amount of arrays you want 
for (var i = 0; i < n; i++) { 
    var values = []; // Literal notation for an array in JS 
    // Fill in the values array as desired 

    var name = 'arr' + i; // How you'll refer to it in the object 
    collections[name] = values; 
} 

我認爲前雖然,因爲它聽起來並不像你需要對你的陣列明確的名稱,而只是希望陣列的多層。