Vérifier si un élément est présent dans un tableau

La fonction que j'utilise maintenant pour vérifier cela est la suivante :

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

Elle fonctionne. Ce que je cherche à savoir, c'est s'il existe une meilleure façon de procéder.

Code:

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

Exécution:

isInArray(1, [1,2,3]); // true

Mise à jour (2017):

Dans les navigateurs modernes qui suivent la norme ECMAScript 2016 (ES7), vous pouvez utiliser la fonction Array.prototype.includes, qui permet de vérifier beaucoup plus facilement si un élément est présent dans un tableau :

const array = [1, 2, 3];
const value = 1;
const isInArray = array.includes(value);
console.log(isInArray); // true
Commentaires (7)

Utilisez simplement indexOf :

haystack.indexOf(needle) >= 0

Si vous souhaitez prendre en charge les anciens explorateurs Internet (< IE9), vous devrez inclure votre code actuel comme solution de rechange cependant.

À moins que votre liste ne soit triée, vous devez comparer chaque valeur à l'aiguille. Par conséquent, votre solution et indexOf devront tous deux exécuter n/2 comparaisons en moyenne. Cependant, comme indexOf est une méthode intégrée, elle peut utiliser des optimisations supplémentaires et sera légèrement plus rapide en pratique. Notez que, sauf si votre application effectue des recherches dans les listes extrêmement souvent (disons 1000 fois par seconde) ou si les listes sont énormes (disons 100k entrées), la différence de vitesse n'aura pas d'importance.

Commentaires (6)

Pour ce faire, vous pouvez utiliser la fonction _contains de la bibliothèque underscore.js :

if (_.contains(haystack, needle)) {
  console.log("Needle found.");
};
Commentaires (2)