O'Reilly

Implementing an Array.count() Method in JavaScript

By on  

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?

Track.js Error Reporting

Upcoming Events

Recent Features

  • 7 Essential JavaScript Functions

    I remember the early days of JavaScript where you needed a simple function for just about everything because the browser vendors implemented features differently, and not just edge features, basic features, like addEventListener and attachEvent.  Times have changed but there are still a few functions each developer should...

  • Chris Coyier’s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

Incredible Demos

  • Sexy Opacity Animation with MooTools or jQuery

    A big part of the sexiness that is Apple software is Apple's use of opacity. Like seemingly every other Apple user interface technique, it needs to be ported to the web (</fanboy>). I've put together an example of a sexy opacity animation technique...

  • Create a Photo Stack Effect with Pure CSS Animations or MooTools

    My favorite technological piece of Google Plus is its image upload and display handling.  You can drag the images from your OS right into a browser's DIV element, the images upload right before your eyes, and the albums page displays a sexy photo deck animation...

Discussion

  1. 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. :)

  2. Do you do this for strings as well?

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

  4. Jason

    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.

  5. Jason

    Correction to my previous post:

    the second code snippet would be:

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

    and its length property would actually return 101.

  6. riv

    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;
    }
    
    • Riv, thats a much better form of the count use. Its surprising that this is not built into javascript.

  7. Christian
    Array.prototype.count = function () {
        for (k in this) { if (this[k].constructor !== Function) { this.length++; } };
        return this.length;
    }
    
  8. I think it’s okay for personal project but it has a counter side when you are in enterprise. The maintainability is harder when people use custom extension (prototype existing framework object). It cane be confusing. In some case, I have seen people creating function to simply get an object inside an array. I think this should be used with parsimony. But, it’s just my opinion…

  9. Iskren Antonov
    Array.prototype.count = function () {
    	var counter = 0; // Initializing main counter
    	for(i in this) // Looping through elements
    		if(typeof this[i] != "undefined") // If empty it's undefined
    			counter++; // Counting not empty elements
    	return counter-1; // Excepting own function
    }
    

    This is a working one. It counts function elements too.

  10. Lineo

    I’ve just bumped into learning Js, I try to be as attentive as possible but, I don’t find a way. So, may any one help me how to understand Js programming.

  11. Rowan Adinghey
    Array.prototype.count = function (a) {
    	var c = 0;
    	for(var i = 0; i < this.length; i++) {
    		if(typeof(this[i]) !== "undefined") {
    			if(typeof(this[i]) == "string" && this[i].length == 0) {
    			} else { 
    				c++;
    			}
    		}
    	}
    	return c;
    }
    

    OR

    
    count = function (a) {
    	var c = 0;
    	for(var i = 0; i < this.length; i++) {
    		if(typeof(a[i]) !== "undefined") {
    			if(typeof(a[i]) == "string" && a[i].length == 0) {
    			} else { 
    				c++;
    			}
    		}
    	}
    	return c;
    }
    

    Wow, no functionality to edit comments? What is this, the year 2001?

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Get Node.js Command Line Arguments with yargs

    Using command line arguments within Node.js apps is par for the course, especially when you're like me and you use JavaScript to code tasks (instead of bash scripts).  Node.js provides process.argv but that doesn't provide a key: value object like you'd expect: Bleh.  If you want to work with a...

  • OâReilly Velocity Conference â New York

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • Free Download: Font Bundle Featuring 17 Incredible Typefaces

    The only thing we love more than a good font, is a good free font. So we’ve combed the Web for some of our favorite free fonts, and gathered them here in a single download. You’ll find a variety of useful typefaces, from highly geometric designs...

  • OâReilly Velocity Conference â Amsterdam

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • CanIUse Command Line

    Every front-end developer should be well acquainted with CanIUse, the website that lets you view browser support for browser features.  When people criticize my blog posts for not detailing browser support for features within the post, I tell them to check CanIUse:  always up to date, unlike...