gop*_*410 60 javascript arrays javascript-objects
我有一个js关联数组(或者有些人可能更愿意把它称为对象),比如说
var quesArr=new Array();
quesArr["q101"]="Your name?";
quesArr["q102"]="Your age?";
quesArr["q103"]="Your school?";
Run Code Online (Sandbox Code Playgroud)
是否有任何内置函数可以获得此数组的长度,或jQuery或其他库中的任何解决方案?目前quesArr.length会给出0,因为你们大多数人都必须知道.
请不要像在这个问题中提到的那样建议迭代整个数组/对象,因为我拥有的数组/对象非常大.
有什么方法可以继续吗?
T.J*_*der 117
不,没有内置属性可以告诉您对象有多少属性(这就是您要查找的属性).
我能想到的最接近的是ES5和更高版本的功能Object.keys(spec | MDN),您可以像这样使用:
console.log(Object.keys(quesArr).length); // "3"
Run Code Online (Sandbox Code Playgroud)
Object.keys返回对象自己的可枚举属性的名称数组.但内部当然是你不想使用的那个循环(当然,用于ES5之前的环境的polyfill使用循环).
还有另一个ES5 +特性Object.getOwnPropertyNames(spec | MDN),它返回对象的"自己"属性名称的数组,而不管它们是否可枚举.
两者都支持任何模糊的现代.IE9 +,以及至少2011年以来的Chrome,Firefox和Safari版本.
FWIW,除非您要使用Array对象的功能,否则不要将其作为数组.代替:
var quesArr = {};
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";
Run Code Online (Sandbox Code Playgroud)
如果您不希望它们(无论是使用数组还是普通对象),那么这些键也不必在方括号中作为字符串文字给出:
var quesArr = {};
quesArr.q101 = "Your name?";
quesArr.q102 = "Your age?";
quesArr.q103 = "Your school?";
Run Code Online (Sandbox Code Playgroud)
但如果您愿意,可以使用其他符号; 它们完全等效,除了用虚线表示法,键必须是有效的标识符(在括号中表示它们可以是任何东西).
你甚至可以这样做:
var quesArr = {
q101: "Your name?",
q102: "Your age?",
q103: "Your school?"
};
Run Code Online (Sandbox Code Playgroud)
或(如果密钥不是有效的标识符):
var quesArr = {
"q101": "Your name?",
"q102": "Your age?",
"q103": "Your school?"
};
Run Code Online (Sandbox Code Playgroud)
假设你有以下,
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
Run Code Online (Sandbox Code Playgroud)
但是,有一种方法可以计算现代浏览器的长度.(Chrome,FF4 +,IE9)
Object.keys(myObject);
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3
Run Code Online (Sandbox Code Playgroud)