使用整数键创建关联数组

Posted

技术标签:

【中文标题】使用整数键创建关联数组【英文标题】:Create an associative array with integer keys 【发布时间】:2012-12-28 02:49:32 【问题描述】:

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

a["10"] = "ten";

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

【问题讨论】:

数组不是用来做这个的,那么你为什么需要一个数组呢?也许对象具有您正在寻找的功能,但您不知道。 我在 SAPUI5 中的一个项目中使用 javascript,我需要在下拉列表中填充数组,而下拉列表不支持对象。我只需要数组.. :( Javascript 数组 对象。 “索引”只是数字属性名称,长度属性定义为最高索引加一,它不是索引的计数。 【参考方案1】:

JavaScript 没有关联数组。在 JavaScript 中这样做的唯一方法是使用对象:

var a = 
    '10': 'ten'
;

【讨论】:

-1 JavaScript 确实有Associative Arrays(又名地图又名字典);尽管以有限的形式(即对象)将所有键强制转换为字符串。虽然这个术语感觉相当陈旧,但它是有效的,并且在 Perl 等某些语言中很常见(并且在 php 等其他语言中被滥用)。 @Daksh - 不。你能告诉我们为什么你需要它是一个数组吗?也许我们可以解决那个 @Daksh - javascript 中没有稀疏/关联数组之类的东西。你可以有一个数组或一个对象。这些是你的选择。你可以想要一些不同的东西,但它不存在。 @Cam 我不同意。这个答案以一个不正确的陈述开头。(此外,它没有解释为什么在数组属性中使用"10" 与使用10 相同,所以没有什么可以抵消我的缺点。) @jfriend00——我认为“稀疏”一词是可以理解的,可以理解为省略了一些索引的数组,例如[0,1,,,4] 或未定义。【参考方案2】:

ECMAScript 确实有Associated Arrays1 - 对象(以及扩展的数组)就是一个例子

然而some properties of Arrays are treated specially

数组对象对特定类别的属性名称给予特殊处理。 属性名称P(以字符串值的形式)是数组索引当且仅当ToString(ToUint32(P)) 是等于P ..

.. 具体来说,每当添加名称为数组索引的属性时,如有必要,长度属性会更改,使其比该数组索引的数值大一..

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

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

话虽如此,帖子并没有说明真正的问题是什么。与其假设必须以这种特定方式完成,不如考虑解释意图是什么:例如为什么是[“10”]?如果对象将在 List 中使用,那么如果有“11 项”,会有什么问题?


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

【讨论】:

以上是关于使用整数键创建关联数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP入门

PHP学习四--数组

在 JavaScript 关联数组中动态创建键

PHP学习(数组)

php基础-数组

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?