2013-12-20 73 views
2

我想知道如何創建一個數組,並使用嵌套for循環向其添加元素。如何聲明數組? 我想完成的陣列看起來像這樣:動態添加元素到二維數組

var array2d = { 
[0, 1, 2, 3], 
[0, 1, 2, 3], 
[0, 1, 2, 3], 
[0, 1, 2, 3], 
}; 

我不想讓格式化爲對象的內部數組。我想要一個簡單的數組,我可以像這樣訪問:

var element = array2d[2][1]; //returns '1' 
+4

替換{}的有[]的。 – Matt

+0

您可以像其他數組一樣聲明該數組:'var array2d = [];' –

回答

1

什麼約翰Hartsock大概就是這個意思(他answer)是:

var my2DArray = [], i, j; 

for(i = 0; i < 5; i++){ 
    my2DArray.push([]); 
    for(j = 0; j < 5; j++){ 
    my2DArray[i].push("Array Position " + i + ", " + j); 
    } 
} 

alert(my2DArray[0][0]); //will alert "Array Postion 0, 0" 
alert(my2DArray[1][4]); //will alert "Array Postion 1, 4" 

工作jsfiddle demo here

OR使用到每一個新的 '子陣列'(可以更快)一個臨時參考

var my2DArray = [], i, j, tempRef; 

for(i = 0; i < 5; i++){ 
    tempRef = my2DArray[i] = []; 
    for(j = 0; j < 5; j++){ 
    tempRef.push("Array Position " + i + ", " + j); 
    } 
} 

alert(my2DArray[0][0]); //will alert "Array Postion 0, 0" 
alert(my2DArray[1][4]); //will alert "Array Postion 1, 4" 

jsfiddle demo here工作。

說明:

一個通常使用var arr=[];創建一個數組並arr.push(/*content*/);到一個新的數組項添加到數組的末尾(因此它是基本上相同arr[arr.length]=/*content*/;)。

因此,如果你有一個數組(my2DArray),然後添加陣列(因爲數組通過引用傳遞,而不是複製)到主/根陣列:my2DArray.push([]);使my2DArray[my2DArray.length]參考這個新的數組(和一旦這個數組存在,你可以用它做些什麼:my2DArray[index][sub_index])。

所以,說你只有一個循環,那麼你也可以添加一個完整的新陣列單推:my2DArray.push([0,1,2,3]);

換句話說,(使用的是什麼。以上說明,)這個單一的生產線將正好創造你在你的問題給出爲例二維數組:

for(var array2d=[], i=0; i<4; array2d[i++]=[0, 1, 2, 3]); 
alert( array2d[2][1] ); //returns '1' 

jsfiddle demo here

順便說一句,在技術上也有甚至沒有數組在JavaScript中,只是一些特殊功能花哨的對象(優秀的解釋這裏https://stackoverflow.com/a/2891043/588079

+0

儘管關於數組的最後一條評論是「相關的對象」是相關的,但還是應該指出,由於全局數組'構造函數作爲與'Object'分開的實體存在。 – ajp15243

+0

wtf?!?添加url的更改是每個代碼塊最後一行的最後一個數組索引 – GitaarLAB

+0

@ ajp15243:關於您的建議編輯:我使用了'/ * content * /',所以我不必解釋[objects,wrappers,values,原語等](http://stackoverflow.com/a/16115543/588079)。另外'JavaScript'(注意外殼)是指一個引擎實現,所以我特別使用'javascript'(當我指ES時)。至於你的評論,你是對的,這就是爲什麼我指出SO上的一個很好的答案。但是*謝謝*關心! – GitaarLAB