3

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.

2
  • I suggest you don't use Array as a variable name. Even if it works (of which I'm not sure), it might cause problems. Commented Nov 25, 2009 at 9:50
  • i know, i dont actually, i forgot to write myArray Commented Nov 25, 2009 at 9:54

5 Answers 5

7

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.

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks Emil. That sounds like a great idea, im trying if now
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 ;) documentcloud.github.com/underscore
Not modifying built in objects defeats half the purpose of JavaScript. It can be done responsibly.
6

use this

http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf

ie version

https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf#Compatibility

Comments

3

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;
    }
}

Comments

0

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.

Comments

0

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 ) ".

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.