Code Snippet
JavaScript Array Contains
Javascript objects are really nice, but sometimes they are missing some useful little functions/methods. The example above is with Arrays. It's really nice to know whether or not an item is contained within your array. Well you can write a function that takes the array and the item you're checking for, but it's much cleaner to add the contains( item ) method to the Array object.
Extending JavaScript Arrays
/**
* Array.prototype.[method name] allows you to define/overwrite an objects method
* needle is the item you are searching for
* this is a special variable that refers to "this" instance of an Array.
* returns true if needle is in the array, and false otherwise
*/
Array.prototype.contains = function ( needle ) {
for (i in this) {
if (this[i] == needle) return true;
}
return false;
}Usage
// Now you can do things like:
var x = Array();
if (x.contains('foo')) {
// do something special
}
I suggest making it more strict,
to:
for example, 1 is the same as true. Unless you do ===
Thank you V1, you’re absolutely right. That should definitely be a ===.
“i” should be declared locally (by using a var statement). Currently you’re setting it as a global variable. Also, you shouldn’t be using the “for(i in something)” construct for arrays. Instead use a traditional for or while loop; they’re much quicker.
Here is how I would write it, coming in at a mere 83 kb minified:
Thank you, It really worked.
Nicer still would be to write it like this:
/**
* is_array
*
* @param mixed input
* @return bol
*/
function is_array(obj) {
if (obj.constructor.toString().indexOf(‘Array’) == -1) {
return false;
}
return true;
}
/**
* contains
*
* @param mixed input
* @param string value
* @return bol
*/
function contains(input, value) {
if (!is_array(input)) {
if (input.indexOf(value) != -1) {
return true;
}
}
else {
var i = input.length;
while (i–) {
if (input[i] === value) {
return true;
}
}
}
return false;
}