目前,我正在使用以下代码在js中创建一个三维数组:
var arr = [["name1", "place1", "data1"],
["name2", "place2", "data2"],
["name3", "place3", "data3"]];
我可以使用arr[0]或arr[1]来访问每个元素。但是是否有办法使用类似这样的键来访问它们:arr["name1"]应该给我第一个?有什么建议吗?我想我正在寻找类似哈希映射的功能。
目前,我正在使用以下代码在js中创建一个三维数组:
var arr = [["name1", "place1", "data1"],
["name2", "place2", "data2"],
["name3", "place3", "data3"]];
我可以使用arr[0]或arr[1]来访问每个元素。但是是否有办法使用类似这样的键来访问它们:arr["name1"]应该给我第一个?有什么建议吗?我想我正在寻找类似哈希映射的功能。
自提问六年以来,情况发生了变化。
由于弱类型,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
>> 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
var arr = {
name1 : ["name1", "place1", "data1"],
name2 : ["name2", "place2", "data2"],
name3 : ["name3", "place3", "data3"]
};
Javascript是一种基于原型的动态语言。您可以在需要时创建对象并更改它们的结构。
var o = {name1: {place1: data1}, name2: {place2: data2}};
并使用以下方式访问:
o.name1
查找实现方式因情况而异,当您有许多经常更改的属性时,这可能会非常缓慢(除了使用特殊方案访问对象属性即Smalltalk中的动态调度嵌入类的Chrome)。一些库(例如MooTools)提供了一些哈希映射相关的结构,
place1
,你会用o.name1.place1
来引用它吗?那会给你什么?是值place1
还是值data1
? - Noble-Surfer