Javascript中的关联数组?

4

目前,我正在使用以下代码在js中创建一个三维数组:

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

我可以使用arr[0]或arr[1]来访问每个元素。但是是否有办法使用类似这样的键来访问它们:arr["name1"]应该给我第一个?有什么建议吗?我想我正在寻找类似哈希映射的功能。

3个回答

3

自提问六年以来,情况发生了变化。

由于弱类型,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

1
感谢更新。6年后的你,又过了6年。 - horace

2
唯一的方法是将其包装在一个对象中。
var arr = {
    name1 : ["name1", "place1", "data1"],
    name2 : ["name2", "place2", "data2"],
    name3 : ["name3", "place3", "data3"]
};

@Legend - 别忘了采纳一个答案。这会确保你在将来继续得到高质量的答案。另外,它也会让我看起来很棒。 :) - ChaosPandion
当然,回答问题的时间限制为15分钟 :) - Legend

1

Javascript是一种基于原型的动态语言。您可以在需要时创建对象并更改它们的结构。

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

并使用以下方式访问:

o.name1

查找实现方式因情况而异,当您有许多经常更改的属性时,这可能会非常缓慢(除了使用特殊方案访问对象属性即Smalltalk中的动态调度嵌入类的Chrome)。一些库(例如MooTools)提供了一些哈希映射相关的结构,


在这个例子中,要访问place1,你会用o.name1.place1来引用它吗?那会给你什么?是值place1还是值data1 - Noble-Surfer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接