2010-08-03 103 views
3

目前,我使用以下創建在JS一個三維陣列:JavaScript中的關聯數組?

var arr = [["name1", "place1", "data1"], 
      ["name2", "place2", "data2"], 
      ["name3", "place3", "data3"]]; 

我可以使用ARR訪問每個元素[0]或常用3 [1]。但無論如何,我可以使用這樣的鍵來訪問它們:arr [「name1」]應該給我第一個。有什麼建議麼?我想我正在尋找一個像功能一樣的HashMap。

回答

3

你可以做到這一點的唯一方法是將它包裝在一個對象中。

var arr = { 
    name1 : ["name1", "place1", "data1"], 
    name2 : ["name2", "place2", "data2"], 
    name3 : ["name3", "place3", "data3"] 
}; 
+0

太棒了...像一個魅力工程。非常感謝! – Legend 2010-08-03 18:30:48

+0

@Legend - 不要忘記接受答案。它將確保您在將來繼續獲得高質量的答案。 *另外它讓我看起來很好。 :)* – ChaosPandion 2010-08-03 18:39:33

+0

當然...有一個15分鐘的時間限制來接受答案:) – Legend 2010-08-03 18:50:35

1

Javascript是基於原型的動態語言。您可以創建對象並在需要時更改其結構。

var o = {name1: {place1: data1}, name2: {place2: data2}}; 

,並獲得它:

o.name1 

的查找實現變化,雖然,當你有很多經常更改,這可能相當緩慢的特性(除Chrome中使用一種特殊的方案來訪問對象屬性,即嵌入類a-la-dynamic dispatch from smalltalk)。一些圖書館(例如MooTools)提供了一些散列圖相關結構,

+0

爲指針+1。 :) – Legend 2010-08-03 19:07:14

+0

所以在這個例子中,要訪問place1,你會用'o.name1.place1'來引用它嗎?那會給你什麼?值'place1'或值'data1'? – someone2088 2013-03-13 10:06:41

0

自問題提出後的六年中,情況已經發生了變化。

由於弱類型關聯數組在JavaScript僞造

>> var names = new Array(); 
undefined 

>> names["first"] = "Dotan"; 
"Dotan" 

>> names["last"] = "Cohen"; 
"Cohen" 

>> for (key in names) { console.log(key+" "+names[key]) } 
undefined 
first Dotan 
last Cohen 

也就是說有時有用的,並且自2012年起支持它所有的瀏覽器發佈,但是有警告!陣列不能簡單地讀回:

>> names 
Array [ ] 

更重要的是,陣列的長度不能容易地檢索到:

>> names.length 
0 

因此,這不是在這個意義上的關聯數組的JavaScript會已經支持它,如果它是有意的,而是一個解決方案,通常是有用的,如果由於某種原因,真正的JS對象不支持你所需要的:

>> var names = {}; 
undefined 

>> names.first = "Dotan"; 
"Dotan" 

>> names.last = "Cohen"; 
"Cohen" 

>> for (key in names) { console.log(key+" "+names[key]) } 
undefined 
first Dotan 
last Cohen 

>> names 
Object { first: "Dotan", last: "Cohen" } 

>> Object.keys(names).length 
2