Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的关联数组?_Javascript - Fatal编程技术网

Javascript中的关联数组?

Javascript中的关联数组?,javascript,Javascript,目前,我正在使用以下方法在js中创建3d阵列: var arr = [["name1", "place1", "data1"], ["name2", "place2", "data2"], ["name3", "place3", "data3"]]; 我可以使用arr[0]或arr[1]访问每个元素。但是,我是否可以使用这样的密钥访问它们:arr[“name1”]应该给我第一个。有什么建议吗?我想我正在寻找一种类似Hashmap的功能。唯一可以做到这一点

目前,我正在使用以下方法在js中创建3d阵列:

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

我可以使用arr[0]或arr[1]访问每个元素。但是,我是否可以使用这样的密钥访问它们:arr[“name1”]应该给我第一个。有什么建议吗?我想我正在寻找一种类似Hashmap的功能。

唯一可以做到这一点的方法是将它包装到一个对象中

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

但是,查找实现是不同的,当您有很多经常更改的属性时,这可能会非常慢(除了在Chrome中,它使用一种特殊的方案来访问对象属性,即smalltalk中的嵌入式类a-la-dynamic dispatch)。一些库(如MooTools)提供了一些与哈希映射相关的结构,

自提出此问题以来的六年中,情况发生了变化。

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

@传奇-别忘了接受答案。这将确保你在未来不断得到高质量的答案。另外,它让我看起来很好。:)当然接受答案有15分钟的时间限制:)因此,在本例中,要访问place1,您是否可以使用
o.name1.place1
?那会给你什么?值
place1
或值
data1