繁体   English   中英

使用整数键创建关联数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM