views:

264

answers:

5

Hi all,

I have search through quite a lot of questions here, but havent found one that i think fits my bill, so if you know of one please link to it.

I have an array that i want to search through for a specific number and if that number is in the array, i then want to take an action and if not then another action.

I have something like this

var Array = ["1","8","17","14","11","20","2","6"];

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8)
        then change picture.src to srcpicture1
    else
        then change picture.src to srcpicture2
}

but this will run the lenght of the array and end up checking the last element of the array and since the last element is not 8 then it will change the picture to picture2.

Now i can see why this happens, i just dont have any ideas as to how to go about checking if an array contains a specific number.

Thanks in advance.

+1  A: 

Why don't just you abort the loop when you find the right number :

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8) {
        //change picture.src to srcpicture1
        break;
    }
}
Soufiane Hassou
A: 

You could sort the array first then check the array only up to the point at which a number would be in the array, were it to exist.

Russ Cam
+3  A: 

What you can do is write yourself a function to check if an element belongs to an array:

function inArray(array, value) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == value) return true;
    }
    return false;
}

And the just do:

var arr = ["1","8","17","14","11","20","2","6"];
if (inArray(arr, 8)) {
    // change picture.src to srcpicture1
} else {
    // change picture.src to srcpicture2
}

It's a lot more readable to me.


For extra points you can add the function to the array prototype like so:

Array.prototype.has = function (value) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === value) return true;
    }
    return false;
};

And then the call would be

if (arr.has(8)) // ...

Pushing this even further, you can check for indexOf() method on array and use it - if not - replace it with the code above.


P.S. Try not to use Array for a variable name, since it's reserved for the actual array type.

Emil Ivanov
Thanks Emil. That sounds like a great idea, im trying if now
Thorbjørn Reimann-Andersen
Should be detecting indexOf method and using it if it's available...
J-P
Can I say - do not modify buidl-in objects prototype? Only if you have to...About your question -- there is a good and light(!) library around here called underscore.js. 50 useful methods to work with array etc. Try it. You ay find it good to work with AND to learn from ;)http://documentcloud.github.com/underscore/
NilColor
Not modifying built in objects defeats half the purpose of JavaScript. It can be done responsibly.
Justin Johnson
A: 

If you have unique keys and a faster retrieval is what you care about a lot, you can consider using a map instead of an array (if there's a hard-bound case of using an array, then it won't work of course). If using a map, you just check "if( num in arr ) ".

Abhishek