JavaScript 关联数组的长度

我有一个 JavaScript 关联数组

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

是否有一个内置函数可以得到这个数组的长度,或者在 jQuery 或其他库中的解决方案?目前 quesArr.length 的值为0,大多数人都知道这一点。

请不要建议像 这个问题中提到的那样迭代整个数组/对象,因为我的数组/对象非常大。

我能继续吗?

93640 次浏览

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

我能想到的最接近的是两个 ES5和更高的功能,Object.keys(规格 | MDN)和 Object.getOwnPropertyNames(规格 | MDN)。例如,您可以像下面这样使用 Object.keys:

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

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

在 ES2015 + 中,对象可以具有键为符号而不是字符串的属性。Object.getOwnPropertySymbols(规格 | 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?"
};

可以是单引号或双引号。

我们还可以通过使用一个名为 长度的关联元素来跟踪数组的长度来处理关联数组长度问题。

众所周知的 :

myArray["length"] = 0;

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

然后你可以做这样的事情:

theLength = myArray.length;

假设您有以下内容,

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

关联数组没有长度属性,但有 你可以得到长度