开发者

Javascript Checking array for presence of a specific number

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开发者_JS百科 a specific number.

Thanks in advance.


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.


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


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


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.


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜