Maison  >  Questions et réponses  >  le corps du texte

Comment vérifier si un tableau contient une valeur en JavaScript ?

<p>Quel est le moyen le plus simple et le plus efficace de savoir si un tableau JavaScript contient une valeur ? </p> <p>C'est la seule façon que je connaisse :</p> <pre class="brush:php;toolbar:false;">fonction contient(a, obj) { pour (var i = 0; i < a.length; i++) { si (a[i] === obj) { renvoie vrai ; } } renvoie faux ; }</pré> <p>Existe-t-il un moyen meilleur et plus propre d’y parvenir ? </p> <p>Ceci est lié à la question Stack Overflow <em>Quelle est la meilleure façon de trouver des éléments dans un tableau JavaScript ? </em> Étroitement liée, cette question concerne la recherche d'objets dans un tableau à l'aide de <code>indexOf</code>. </p>
P粉592085423P粉592085423424 Il y a quelques jours413

répondre à tous(2)je répondrai

  • P粉788571316

    P粉7885713162023-08-24 00:43:22

    Mise à jour 2019 : cette réponse date de 2008 (11 ans !) et n'a rien à voir avec l'utilisation moderne du JS. Les améliorations de performances promises sont basées sur des tests de référence effectués dans le navigateur à ce moment-là. Cela n'est peut-être pas pertinent pour le contexte d'exécution JS moderne. Si vous avez besoin d’une solution simple, recherchez d’autres réponses. Si vous avez besoin des meilleures performances, évaluez-vous dans un environnement d'exécution pertinent.

    Comme d'autres l'ont dit, parcourir un tableau est probablement la meilleure façon de le faire, mais il a été prouvé qu'une boucle while descendante est le moyen le plus rapide d'itérer en JavaScript. Par conséquent, vous devrez peut-être réécrire votre code comme suit :

    function contains(a, obj) {
        var i = a.length;
        while (i--) {
           if (a[i] === obj) {
               return true;
           }
        }
        return false;
    }

    Bien sûr, vous pouvez également étendre le prototype Array :

    Array.prototype.contains = function(obj) {
        var i = this.length;
        while (i--) {
            if (this[i] === obj) {
                return true;
            }
        }
        return false;
    }

    Maintenant, vous pouvez simplement utiliser :

    alert([1, 2, 3].contains(2)); // => true
    alert([1, 2, 3].contains('2')); // => false

    répondre
    0
  • P粉076987386

    P粉0769873862023-08-24 00:14:12

    Les navigateurs modernes ont Array#includes qui fait exactement cela et est largement pris en charge par tout le monde sauf IE  :

    console.log(['joe', 'jane', 'mary'].includes('jane')); // true

    répondre
    0
  • Annulerrépondre