Just a little thing I happened to whip up for work the other day. I can't believe that this wasn't around in quite this format on the internets, yet.
One of the guys at work has a fondness for ruby because of how easy it makes it to deal with collections and arrays. I agree that's one of the hallmarks of a good language; there's a reason nobody stays sane long doing arrays in bash.
Another strong feature of a language is its extensibility, especially with built-in types. Ruby and javascript have this down to an art. It seems to me like Java really missed the boat with its mix of Objects and built-ins (int, float, etc.).
It's trivial to check whether a key exists in an object or array in javascript. You can exploit this to great effect to make associative arrays.
'undefined' === typeof(arr[key])
But, for some reason, there's nothing inherent in the language to check for a value in an array. What I was really searching for was ruby's awesome Array.include? method.
So, I added one.
Just extend array.prototype and you can add methods to every array object. Add them to Number.prototype, and you can do crazy things like 5.times(function() { ... });.
Note the use of === for comparisons. Not only does using it religiously keep jslint happier, it means that this will work properly everywhere, even if the array contains 0 or ''. Unfortunately, I couldn't come up with any fanciness better than searching (up to) the whole array.
/** * Checks whether or not key is contained in this array. * This function compares elements with ===. * * @param Object key * @return bool */ array.prototype.include = function(key) { for (var i = 0; i < this.length; ++i) { if (this[i] === key) { return true; } } return false; };
I only wish ? were valid in identifiers so I could have named the function correctly.
:wq