2010-08-03 69 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