Vérifier si un tableau (array) contient une valeur en JavaScript

Quelle est la méthode la plus concise et la plus efficace pour savoir si un tableau JavaScript contient une valeur ?

Voici la seule façon que je connaisse de le faire :

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

Existe-t-il une méthode plus efficace et plus concise pour réaliser cet objectif ?

Les navigateurs modernes disposent de Array#includes qui fait exactement cela et est largement supporté par tout le monde sauf IE :

console.log(['A', 'B', 'C'].includes('B')); // true

Vous pouvez également utiliser Array#indexOf, qui est moins direct, mais qui ne nécessite pas de polyfills pour les navigateurs obsolètes.

console.log(['A', 'B', 'C'].indexOf('B') >= 0); // true

indexOf peut-être, mais il s’agit d’une « extension JavaScript de la norme ECMA-262 ; elle peut donc ne pas être présente dans d’autres implémentations de la norme ».

Exemple :

[1, 2, 3].indexOf(1) => 0
["alex", "bob", "ali"].indexOf("bob") => 1
[1, 2, 3].indexOf(4) => -1

Voici comment l’utiliser dans une condition IF:

function isInArray(array, search)
{
    return array.indexOf(search) >= 0;
}

// Utilisation
if(isInArray(my_array, "my_value"))
{
    //...
}

Regardez ce tuto: