Implementing an Array.count() Method in JavaScript
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?
![5 Awesome New Mozilla Technologies You’ve Never Heard Of]()
My trip to Mozilla Summit 2013 was incredible. I've spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out. MozSummit provided the perfect reminder of how brilliant my colleagues are and how much...
![fetch API]()
One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for. We've done well to create elegant APIs around XHR but we know we can do better. Our effort to...
![Flexbox Equal Height Columns]()
Flexbox was supposed to be the pot of gold at the long, long rainbow of insufficient CSS layout techniques. And the only disappointment I've experienced with flexbox is that browser vendors took so long to implement it. I can't also claim to have pushed flexbox's limits, but...
![Duplicate the jQuery Homepage Tooltips Using Dojo]()
The jQuery homepage has a pretty suave tooltip-like effect as seen below:
Here's how to accomplish this same effect using Dojo.
The XHTML
The above HTML was taken directly from the jQuery homepage -- no changes.
The CSS
The above CSS has been slightly modified to match the CSS rules already...
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. :)
Do you do this for strings as well?
@Binny: No, I don’t. Just arrays.
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.
Correction to my previous post:
the second code snippet would be:
var myOtherArray = [];
myOtherArray[100] = ‘one’;
and its length property would actually return 101.
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.
Array.prototype.count = function () { for (k in this) { if (this[k].constructor !== Function) { this.length++; } }; return this.length; }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…
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.
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.
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?
Querying the length is faster than invoking a method, but the habit of using
.count()is interesting.In python is used
len([1, 2, 3])function to get the count, so the JavaScript’s length is not so bad :).