[英]Create an associative array with integer keys
我需要在javascript中使用integer
键创建一个关联数组,如下所示;
a["10"] = "ten";
但是当我创建一个数组时,它将值放到数组的10th
索引,并创建一个长度为11的数组。我希望它是一个键值对。 我知道这可以通过使用对象来完成,但我只需要一个数组。
JavaScript没有关联数组。 在JavaScript中执行此操作的唯一方法是使用对象:
var a = {
'10': 'ten'
};
ECMAScript 确实有关联数组 1 - 对象(以及扩展,数组)就是一个例子
但是 , Arrays的某些属性是专门处理的 :
数组对象对特定类的属性名称进行特殊处理。 当且仅当
ToString(ToUint32(P))
等于P
属性名P
(以String值的形式)是一个数组索引。.. 具体来说,每当添加名称为数组索引的属性时,如果需要,将更改length属性,使其大于该数组索引的数值。
因此,给定arr = []
,表达式arr["1"]
和arr[1]
引用相同的属性名称。 由于P
(属性名称)为“1”且length
为0,因此分配给此属性会将arr.length
设置为ToUint32(P)+1
或2。
这是不可能改变这种行为。 如果你想没有特殊的length
属性,然后使用一个“正常”的对象,而不是一个数组。 但是,许多Array.prototype
函数可以与任意对象一起使用(除了一些实现怪癖),它们具有length
属性,并且可以创建Object,使得它使用Array.prototype
作为自己的原型。
所有这一切,这篇文章都没有说明真正的问题是什么 。 不要以为必须以特定方式完成,而是考虑解释意图是什么:例如为什么[“10”]? 如果对象将在List中使用,那么如果有“11项”会出现什么问题?
1在讨论这个陈述之前,请阅读文章:名称中的术语“数组”并不意味着有序的序列,也不排除长度或使用哈希等的附加概念。如果你的定义不同 ,确保指定它是什么以及给定操作的期望行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.