2009-11-25 9 views
3

J'ai une recherche parmi beaucoup de questions ici, mais je n'en ai trouvé aucune qui corresponde à ma facture, donc si vous en connaissez une, veuillez la lier.Javascript Vérification tableau pour la présence d'un nombre spécifique

J'ai un tableau que je veux rechercher à travers un nombre spécifique et si ce nombre est dans le tableau, je veux alors prendre une action et sinon une autre action.

J'ai quelque chose comme ça

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 
} 

mais courrai la longueur du tableau et finissent par vérifier le dernier élément du tableau et depuis le dernier élément n'est pas 8 alors il va changer l'image de picture2.

Maintenant, je peux voir pourquoi cela se produit, je n'ai tout simplement pas d'idées sur la façon de vérifier si un tableau contient un nombre spécifique.

Merci d'avance.

+0

Je vous suggère de ne pas utiliser Array comme nom de variable. Même si cela fonctionne (dont je ne suis pas sûr), cela pourrait causer des problèmes. –

+0

Je sais, je n'ai pas réellement, j'ai oublié d'écrire myArray –

Répondre

8

Ce que vous pouvez faire est de vous écrire une fonction pour vérifier si un élément appartient à un tableau:

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

Et juste faire:

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 
} 

Il est beaucoup plus facile à lire pour moi.


Pour les points supplémentaires que vous pouvez ajouter la fonction au prototype de tableau comme ceci:

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

Et l'appel serait

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

Pousser encore plus loin, vous pouvez vérifier pour indexOf() méthode sur tableau et l'utiliser - sinon - le remplacer par le code ci-dessus.


P.S. Essayez de ne pas utiliser Array pour un nom de variable, car il est réservé au type de tableau réel.

+0

Merci Emil. Cela ressemble à une bonne idée, je suis en train d'essayer si maintenant –

+7

Devrait être la détection de la méthode indexOf et de l'utiliser si elle est disponible ... – James

+2

Puis-je dire - ne pas modifier le prototype d'objets Buidl-in? Seulement si vous devez ... A propos de votre question - il y a une bonne bibliothèque (!) Ici appelée underscore.js. 50 méthodes utiles pour travailler avec tableau etc. Essayez-le. Vous pouvez trouver du travail avec ET pour apprendre;) http://documentcloud.github.com/underscore/ – NilColor

3

Pourquoi ne pas seulement vous interrompez la boucle quand vous trouvez le bon nombre:

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

C'est ce dont j'ai besoin, merci! – eshellborn

0

Vous pouvez trier le tableau d'abord, puis vérifiez le tableau que jusqu'au point où un certain nombre serait en tableau, était-ce pour exister.

0

Si vous avez des clés uniques et une récupération plus rapide est ce que vous vous souciez beaucoup, vous pouvez envisager d'utiliser une carte à la place d'un tableau (s'il y a un cas d'utilisation d'un tableau, cela ne marchera pas bien sûr). Si vous utilisez une carte, il vous suffit de cocher "if (num in arr)".