JavaScript 关联数组的长度

Posted

技术标签:

【中文标题】JavaScript 关联数组的长度【英文标题】:Length of a JavaScript associative array 【发布时间】:2012-05-20 18:03:08 【问题描述】:

我有一个 javascript 关联数组(或者有些人可能更喜欢称它为对象),比如说

var quesArr = new Array();
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";

是否有可以获取该数组长度的内置函数,或者 jQuery 或其他库中的解决方案?目前 quesArr.length 会给出 0,你们中的大多数人一定都知道。

请不要建议像this question中提到的那样遍历整个数组/对象,因为我拥有的数组/对象非常大。

有没有办法让我继续这样做?

【问题讨论】:

我会建议您遍历整个对象,因为这是实现此目的的唯一方法。你所拥有的是一个对象(在第二行之前是一个数组)。对象没有长度,数组有。 Length of a JavaScript object (that is, associative array)的可能重复 【参考方案1】:

不,没有内置属性可以告诉您对象有多少属性(这是您要查找的)。

我能想到的最接近的是两个 ES5 和更高的特性,Object.keys (spec | MDN) 和 Object.getOwnPropertyNames (spec | MDN)。例如,您可以像这样使用Object.keys

console.log(Object.keys(quesArr).length); // "3"

Object.keys 返回一个对象自己的可枚举字符串命名属性的名称数组。但是在内部(理论上)这是您不想使用的循环(当然,在 ES5 之前的环境中,它的 polyfill 使用了循环)。如果您还想要不可枚举的字符串命名属性,则可以改用Object.getOwnPropertyNames

在 ES2015+ 中,对象可以具有键是符号而不是字符串的属性。 Object.getOwnPropertySymbols (spec | MDN) 让你得到它们。


FWIW,除非您要使用对象的 Array 功能,否则不要将其设为数组。而是:

var quesArr = ;
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";

如果您不希望这些键是方括号中的字符串文字(无论您使用数组还是普通对象),也不必在方括号中给出这些键:

var quesArr = ;
quesArr.q101 = "Your name?";
quesArr.q102 = "Your age?";
quesArr.q103 = "Your school?";

但如果您愿意,可以使用其他符号;它们是完全等价的,只是使用点分符号时,键必须是有效的标识符名称(在括号中,它们可以是任何东西)。

你甚至可以这样做:

var quesArr = 
    q101: "Your name?",
    q102: "Your age?",
    q103: "Your school?"
;

或者(如果键不是有效的标识符):

var quesArr = 
    "q101": "Your name?",
    "q102": "Your age?",
    "q103": "Your school?"
;

可以是单引号或双引号。

【讨论】:

好的,这对我来说是一些新信息。 &我还看到没有迭代就无法知道对象的长度。总之谢谢。 :) @gopi1410:哦,顺便说一句,任何时候你发现自己在写new Array(),你都可以用[]代替。 [] 创建一个新的空白数组,就像 创建一个新的空白对象一样。【参考方案2】:

假设你有以下,

var myObject = ;  // Denotes an Object is being created
myObject.city = "Chennai";
myObject.state = "Tamilnadu";
myObject.country = "Indian Peninsula";
console.log(myObject.length);  // Results in undefined

但是,有一种方法可以在现代浏览器(Chrome、Firefox 4+ 和 Internet Explorer 9)中计算长度:

Object.keys(myObject);
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3

【讨论】:

【参考方案3】:

还可以通过使用称为 length 的关联元素跟踪数组的长度来处理关联数组长度问题。

通称

myArray["length"] = 0;

在添加或删除元素时,只需在 myArray["length"] 元素中添加或减去即可。

然后您可以执行以下操作:

theLength = myArray.length;

【讨论】:

在 OP 的情况下,他们的数组是一个实际的数组,而不是一个简单的对象,所以它已经有一个 .length 属性。因此,如果他们碰巧做了任何会改变长度的“正确”数组操作(例如,.push())......【参考方案4】:

关联数组没有长度属性,而是you can get length。

【讨论】:

请不要将您的答案发布为图片 - 我们的防火墙会阻止 imgur

以上是关于JavaScript 关联数组的长度的主要内容,如果未能解决你的问题,请参考以下文章

使用整数键创建关联数组

PHP - 将两个数组(相同长度)合并为一个关联?

ActionScript 3 获取关联数组的长度

获取关联数组的长度

JavaScript学习(九十二)—关联数组的基本操作

Javascript :: 如何将关联数组的键获取到数组变量?