2012-03-03 109 views
3

我對javascript很少有新意,並且我在使用javascript製作2D(或者可能需要3D)數組時遇到了麻煩。在Javascript中創建數組

我現在有2條信息我需要收集:一個ID和一個值,所以我創建了以下:

var myArray = []; 

var id = 12; 
var value = 44; 

myArray[id]=value; 

但我意識到,這是不容易循環通過陣列像對循環,所以我想這:

myArray[myArray.length] = id; 
myArray[myArray.length-1][id]=value; 

我想要做的這一點,以便在for循環中我能得到的識別碼與價值觀容易但以上只有當我遍歷它返回的值。有關如何獲得這項工作的任何建議,還是有更好的方法來做到這一點?

感謝

+0

我很困惑你想要做什麼。你想存儲一堆(id,value)對嗎?你是否需要在稍後時間通過id檢索值,或者只是遍歷這些對? – takteek 2012-03-03 04:49:51

+0

@takteek遍歷對,所以我想要訪問元素0的值和ID – user1219627 2012-03-03 04:57:24

回答

14

爲什麼不使用的object hash ES陣列?這種方法允許您將多個值存儲在一個鍵:值格式:

var myArray = []; 
var myElement = { 
    id: 12, 
    value: 44 
} 

myArray[0] = myElement; 

然後,您可以遍歷所有在myArray元素,像這樣的:

var i = 0, 
    el; 

while (el = myArray[i++]) { 
    alert(el.id + '=' + el.value); 
} 
+1

在http://jsfiddle.net/rjzaworski/Lb3yW/ – rjz 2012-03-03 04:52:15

+0

看到它的行動id和值並不總是12和44,它的無論用戶如何設置var,除非這些方法設置myElement.id = 0 myElement.value然後將數組設置爲myElement – user1219627 2012-03-03 05:00:39

+0

你剛纔描述瞭如何做到這一點,哈哈。 'myElement.id = 0' – takteek 2012-03-03 05:05:29

0

也許是最好的方式做多維數組正在使用循環動態創建。

所以你可以有像array[x][y][z]就像我看到你的3D-array標籤。

要循環槽並不困難,您可以驗證陣列的長度,當達到一個維度的末端時,例如z 1增加y和復位z爲0

2D陣列的

爲例構造:

function Array2d(x,y){ 

    var array = new Array(x); 

    while(x>0){ 
     array[x]=new Array(y); 
     x--; 
    } 

    return array; 
} 

創建一個二維數組可以使用這樣的:

var myMatrix = Array2d(4,4); 

這是生成空的4x4矩陣myMatrix[4][4]

(0,0) (1,0) (2,0) (3,0) 
(0,1) (1,1) (2,1) (3,1) 
(0,2) (1,2) (2,2) (3,2) 
(0,3) (1,3) (2,3) (3,3) 

做一個3D或更多維度只是把其他循環內循環。


注:我沒有測試這個功能,這只是一個算法,你應該驗證輸入,如果你插入一個負長度或浮動,這是有可能會崩潰,你的瀏覽器。

2

我想你想是什麼樣的結構字典(在JS這就是所謂的對象),例如{ID =>值}

在JS,你可以做這樣的事情:

var myDict = { 'myId' : 'myValue' }; 
myDict[12] = 44; // from your example and this will be added to myDict 
myDict[11] = 54; 

for (var key in myDict) { 
    console.log('key: ' + key + ', value: ' + myDict[key]); 
}​ 

輸出將是:

鍵:11,值:54

鍵:12,值:44

key:myId,value:myValue