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

var quesArr = new Array();
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";
是否有可以获取此数组长度的内置函数,或者 jQuery 或其他库中的解决方案?目前 quesArr.length 会给出 0,因为你们大多数人都知道。
请不要建议像 this question 中提到的那样遍历整个数组/对象,因为我拥有的数组/对象非常大。
有没有办法让我继续这样做?

最佳答案

不,没有内置属性可以告诉您对象具有多少属性(这就是您要查找的属性)。
我能想到的最接近的是两个 ES5 及更高版本的特性,Object.keys ( spec | MDN ) 和 Object.getOwnPropertyNames ( 0x2181231343141 ( 0x21812213341313) )。例如,您可以像这样使用 Object.keys:

console.log(Object.keys(quesArr).length); // "3"
Object.keys 返回对象自己的可枚举字符串命名属性的名称数组。但是在内部(理论上)它是您不想使用的循环(当然,ES5 之前的环境的 polyfill 使用了循环)。如果您还需要不可枚举的字符串命名属性,则可以使用 Object.getOwnPropertyNames 代替。
在 ES2015+ 中,对象可以具有键为 Symbols 而不是字符串的属性。 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?"
};
或(如果 key 不是有效标识符):
var quesArr = {
    "q101": "Your name?",
    "q102": "Your age?",
    "q103": "Your school?"
};
这些可以是单引号或双引号。

关于javascript - JavaScript 关联数组的长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10563251/

10-17 02:56