Length of a JavaScript object

ID : 232

viewed : 32

Tags : javascriptjavascript-objectsjavascript

Top 5 Answer for Length of a JavaScript object

vote vote

91

Updated answer

Here's an update as of 2016 and widespread deployment of ES5 and beyond. For IE9+ and all other modern ES5+ capable browsers, you can use Object.keys() so the above code just becomes:

var size = Object.keys(myObj).length; 

This doesn't have to modify any existing prototype since Object.keys() is now built-in.

Edit: Objects can have symbolic properties that can not be returned via Object.key method. So the answer would be incomplete without mentioning them.

Symbol type was added to the language to create unique identifiers for object properties. The main benefit of the Symbol type is the prevention of overwrites.

Object.keys or Object.getOwnPropertyNames does not work for symbolic properties. To return them you need to use Object.getOwnPropertySymbols.

var person = {   [Symbol('name')]: 'John Doe',   [Symbol('age')]: 33,   "occupation": "Programmer" };  const propOwn = Object.getOwnPropertyNames(person); console.log(propOwn.length); // 1  let propSymb = Object.getOwnPropertySymbols(person); console.log(propSymb.length); // 2

Older answer

The most robust answer (i.e. that captures the intent of what you're trying to do while causing the fewest bugs) would be:

Object.size = function(obj) {   var size = 0,     key;   for (key in obj) {     if (obj.hasOwnProperty(key)) size++;   }   return size; };  // Get the size of an object const myObj = {} var size = Object.size(myObj);

There's a sort of convention in JavaScript that you don't add things to Object.prototype, because it can break enumerations in various libraries. Adding methods to Object is usually safe, though.


vote vote

89

If you know you don't have to worry about hasOwnProperty checks, you can use the Object.keys() method in this way:

Object.keys(myArray).length 
vote vote

77

Updated: If you're using Underscore.js (recommended, it's lightweight!), then you can just do

_.size({one : 1, two : 2, three : 3}); => 3 

If not, and you don't want to mess around with Object properties for whatever reason, and are already using jQuery, a plugin is equally accessible:

$.assocArraySize = function(obj) {     // http://stackoverflow.com/a/6700/11236     var size = 0, key;     for (key in obj) {         if (obj.hasOwnProperty(key)) size++;     }     return size; }; 
vote vote

62

Here's the most cross-browser solution.

This is better than the accepted answer because it uses native Object.keys if exists. Thus, it is the fastest for all modern browsers.

if (!Object.keys) {     Object.keys = function (obj) {         var arr = [],             key;         for (key in obj) {             if (obj.hasOwnProperty(key)) {                 arr.push(key);             }         }         return arr;     }; }  Object.keys(obj).length; 
vote vote

51

I'm not a JavaScript expert, but it looks like you would have to loop through the elements and count them since Object doesn't have a length method:

var element_count = 0; for (e in myArray) {  if (myArray.hasOwnProperty(e)) element_count++; } 

@palmsey: In fairness to the OP, the JavaScript documentation actually explicitly refer to using variables of type Object in this manner as "associative arrays".

Top 3 video Explaining Length of a JavaScript object

Related QUESTION?