javascript关联数组的长度

时间:2012-05-12 11:20:46

标签: javascript arrays javascript-objects

我有一个js关联数组(或者有些人可能更愿意将其称为对象)喜欢,比如说

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

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

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

有什么方法可以继续吗?

4 个答案:

答案 0 :(得分:102)

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

我能想到的最接近的是ES5及更高版本的功能Object.keysspec | MDN),您可以这样使用:

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

Object.keys返回对象自己的可枚举属性的名称数组。但内部当然是你不想使用的那个循环(当然,对于ES5之前的环境,它的polyfill使用循环)。

还有另一个ES5 +功能,Object.getOwnPropertyNamesspec | MDN),它返回对象的“自己”属性名称的数组,无论它们是否可枚举。

两者都是supported in anything vaguely modern。 IE9 +,以及至少2011年以来的Chrome,Firefox和Safari版本。


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?"
};

答案 1 :(得分:8)

假设您有以下内容,

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,FF4 +,IE9)

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

答案 2 :(得分:1)

通过使用名为length的关联元素跟踪数组的长度,还可以解决关联数组长度问题。

<强>又名

myArray["length"]=0;

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

然后你可以做以下事情:

theLength=myArray.length;

答案 3 :(得分:1)

关联数组没有长度属性you can get length