Implementing an Array.count() Method in Javascript

Written by David Walsh on Wednesday, June 25, 2008


As much as I write about MooTools on my blog, I spend most of my work day knee-deep in PHP. As you probably know, one way to get the size of an array in PHP is to use the count() function:

echo count($my_array);

In javascript, the way to get the size of an array is to use the length property, like this:

alert(my_array.length);

For some reason, I absolutely hate the “.length” way of retrieving the length of an array. For this reason, I’ve implement the count() method into javascript:

Array.prototype.count = function() {
	return this.length;
};

The count() habit is difficult to break, so why try?


Epic Discussion

Commenter Avatar June 25 / #
Rich says:

Thanks for your blog. you offer great advice and tutorials and for some odd reason, if I am looking to see how to complete a task, you have a tutorial on it or at least an idea on the concept I am trying to achieve; so thanks David. Although this post came about 2 days too late. :)

Commenter Avatar June 25 / #
Binny V A says:

Do you do this for strings as well?

David Walsh June 25 / #
david says:

@Binny: No, I don’t. Just arrays.

Commenter Avatar October 19 / #
Jason says:

This is all fine and well, but length is fundamentally different from count.

Take the following example:

var myArray = ['one', 'two', 'three'];
// myArray.length == 3, as we would expect

var myOtherArray[100] = ‘one’;
//myArray.length == 100, NOT 1

Even though we only have 1 item in the array, ‘length’ refers to the largest index + 1. Unlike PHP where we can use numeric keys and strings for indexes in an ad hoc way and still get an accurate count via count(), in JS it’s not quite the same.

In a way, this is just splitting hairs, but a lot of people already don’t understand JS’s length property, and referring to it as “count” only serves to further the confusion.

Commenter Avatar October 19 / #
Jason says:

Correction to my previous post:

the second code snippet would be:

var myOtherArray = [];
myOtherArray[100] = ‘one’;

and its length property would actually return 101.

Commenter Avatar April 02 / #
riv says:

That’s right and that’s what I was expecting when searching for count on js. This should do it:

function count(array)
{
var c = 0;
for(i in array) // in returns key, not object
if(array[i] != undefined)
c++;

return c;

}

Be Heard!

I want to hear what you have to say! Share your comments and questions below.

Name*:
Email*:
Website:  


© David Walsh 2007-2010. Contact David Walsh. Powered by the remarkable MooTools javascript framework.