Length of a JavaScript associative array

gopi1410 picture gopi1410 · May 12, 2012 · Viewed 79k times · Source

I have a JavaScript associative array (or some may prefer to call it an object) like, say

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

Is there a built-in function that could get the length of this array, or a solution in jQuery or another library? Currently quesArr.length would give 0, as most of you must be knowing.

Please don’t suggest iterating over the entire array/object as mentioned in this question, because the array/object which I have is very large.

Is there a way I could proceed with this?

Answer

T.J. Crowder picture T.J. Crowder · May 12, 2012

No, there is no built-in property that tells you how many properties the object has (which is what you're looking for).

The closest I can think of is an ES5 and higher feature, Object.keys (spec | MDN), which you could use like this:

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

Object.keys returns an array of the names of an object's own enumerable properties. But internally of course it's that loop you didn't want to use (and the polyfill for it for pre-ES5 environments uses a loop, of course).

There's also another ES5+ feature, Object.getOwnPropertyNames (spec | MDN), which returns an array of the object's "own" property names regardless of whether they're enumerable.

Both are supported in anything vaguely modern. IE9+, and versions of Chrome, Firefox, and Safari since at least 2011.


FWIW, unless you're going to use the Array features of the object, don't make it an array. Instead:

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

Those keys don't have to be given as string literals in square brackets, either, if you don't want them to be (whether you use an array or a plain object):

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

But you can use the other notation if you prefer; they're exactly equivalent except that with dotted notation the keys must be valid identifier names (in bracketed notation they can be anything).

You can even do this:

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

or (if the keys won't be valid identifiers):

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

Those can be single or double quotes.