使用整数键创建关联数组

时间:2013-01-14 04:47:45

标签: javascript arrays associative-array

我需要在javascript中使用integer键创建一个关联数组,如下所示;

a["10"] = "ten";

但是当我创建一个数组时,它将值放入数组的10th索引,并创建一个长度为11的数组。我希望它是一个键值对。我知道这可以通过使用对象来完成,但我只需要一个数组。

2 个答案:

答案 0 :(得分:8)

JavaScript没有关联数组。在JavaScript中执行此操作的唯一方法是使用对象:

var a = {
    '10': 'ten'
};

答案 1 :(得分:1)

ECMAScript Associated Arrays 1 - 对象(以及扩展名,数组)是一个例子

然而 some properties of Arrays are treated specially

  

Array对象对特定类的属性名称进行特殊处理。属性名P(以String值的形式)是一个数组索引,当且仅当{{ 1}}等于ToString(ToUint32(P)) ..

     

.. 具体来说,每当添加名称为数组索引的属性时,如果需要,将更改length属性,比该数组索引的数值多一个。< / p>

因此,给定P,表达式arr = []arr["1"]引用相同的属性名称。由于arr[1](属性名称)为“1”且P从上方为0,因此对此类属性的分配会将length设置为arr.length或2。

可能会改变此行为。如果您希望具有特殊的ToUint32(P)+1属性,则使用“普通”对象而不是数组。但是,许多length函数可以与任意对象一起使用(除了一些实现怪癖),它们具有Array.prototype属性,而对象可以创建它使用length作为自己的原型。

所有这一切,帖子都没有说明真正的问题是什么。不要以为必须以特定的方式完成,而是考虑解释目的是什么:例如:为什么一个[“10”]?如果对象将在List中使用,那么如果有“11项”会出现什么问题?


1 请在讨论此声明之前阅读文章:名称中的术语“数组”并不意味着有序的序列,也不排除附加的概念长度或使用散列等。如果您使用不同的定义,请确保指定它是什么以及给定操作的期望行为。