IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

variable et .indexOf


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    dessinateur
    Inscrit en
    Avril 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dessinateur

    Informations forums :
    Inscription : Avril 2019
    Messages : 25
    Par défaut variable et .indexOf
    Bonjour à tous,

    Je débute..

    J’aimerai développer ce code de façon à pouvoir inspecter différentes chaines de caractères (que je nomme i0=[..,..,..], i1, i2.. pour localiser un mot entré par l'utilisateur. (récupéré par la variable a)

    Pourquoi si var b=i1; b.indexOf(a) ne fonctionne t il pas alors que i1.indexOf(a) va bien!!? Je n'arrive pas à trouver la réponse..

    Merci pour votre aide ..

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // début code du test
     
        const 
            i0 = ['un', 'deux', 'trois'],
            i1 = ['quatre', 'cinq', 'six'],
            i2 = ['sept', 'huit', 'neuf'];
     
        let a = 'cinq';
     
        // https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/indexOf
        // -1 : n'existe pas
        // 0 à n : index de l'élément cherché
     
        console.log(`i0.indexOf(a) = ${ i0.indexOf(a) }`); // -1
        console.log(`i1.indexOf(a) = ${ i1.indexOf(a) }`); // 1
        console.log(`i2.indexOf(a) = ${ i2.indexOf(a) }`); // -1
     
        // fin code du test
     
    }, {
        capture: false,
        passive: true,
        once: false
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par Charal72 Voir le message
    Pourquoi si var b=i1; b.indexOf(a) ne fonctionne t il pas alors que i1.indexOf(a) va bien!!? Je n'arrive pas à trouver la réponse..
    Si effectivement b = i1, les choses devraient se passer comme tu le décris. Si le problème n’est pas là où on regarde, il faut regarder ailleurs… Peut-être que a est modifié entre les deux tests.
    Ou alors, c’est un problème de portée. Comment et à quel endroit déclares-tu b, i1 et a ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre averti
    Homme Profil pro
    dessinateur
    Inscrit en
    Avril 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dessinateur

    Informations forums :
    Inscription : Avril 2019
    Messages : 25
    Par défaut
    Merci pour votre intérêt..et désolé de ne pas avoir répondu plus vite! En fait des chaines de caractères j'en ai plus de 50! l1....l50) d'ou l’intérêt,( je pense..), de parcourir une boucle type for (i=...) {b=l + i;...
    et c'est là que le b.indexOf(a) ne fonctionne pas!

  5. #5
    Membre averti
    Homme Profil pro
    dessinateur
    Inscrit en
    Avril 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dessinateur

    Informations forums :
    Inscription : Avril 2019
    Messages : 25
    Par défaut
    Voici le code réduit afin de comprendre
    e ne donne pas la bonne valeur si je rentre puma, par ex..
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <input id="case0" type="text" class="cinq" value="" />
    <input id="case2" type="text" class="cinq" value="" />
    <input type="button" value="Nouvelle partie"onClick="myFunction()"/>
     
    <script>
    var i0 = ["lama","puma","elephant","vache","renard"];
    var j=0;
    function myFunction() {
    var a = document.getElementById("case0").value;
    var b="i"+j;
    var e = b.indexOf(a);
    document.getElementById("case2").value= e;
    }
    </script>

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Le problème c'est var b="i"+j;, car tout ce que fait cette ligne est d'affecter à la variable b la chaîne de caractère "i0" (par exemple). Mais ça reste une chaîne de caractère, et le i0 dans cette chaîne ne sera pas vu comme la variable i0 (et heureusement sinon ce serait un sacré bazar).

    Pour que ça fonctionne, il faudrait à la limite remplacer cette ligne par: var b=eval("i"+j);. De cette manière la chaîne de caractère serait interprétée comme du code Javascript et donc i0 vu comme la variable du même nom et remplacée par sa valeur.

    Mais, l'utilisation de eval est le petit signal qui doit te dire que tu t'y prends mal, et qu'il y a sûrement une manière bien plus simple et élégante d'arriver à tes fins (l'utilisation d'un tableau à la place de noms de variable numérotés?). N'ayant pas tous les tenants et aboutissants, je ne peux pas t'en dire plus.

    En parler sarthois, "renard" se dit "r’nâ".

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    on peut utiliser la notation par crochet pour atteindre ta variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var i0 = ["lama", "puma", "elephant", "vache", "renard"];
    var b = "i" + 0;
    alert(window[b]);
    Ceci étant, cela n'est valable, dans le cas présent, que si ta variable est déclarée avec le mot clé var, cela ne fonctionnera pas avec les mots clé let ou const.

  8. #8
    Membre averti
    Homme Profil pro
    dessinateur
    Inscrit en
    Avril 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dessinateur

    Informations forums :
    Inscription : Avril 2019
    Messages : 25
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Le problème c'est var b="i"+j;, car tout ce que fait cette ligne est d'affecter à la variable b la chaîne de caractère "i0" (par exemple). Mais ça reste une chaîne de caractère, et le i0 dans cette chaîne ne sera pas vu comme la variable i0 (et heureusement sinon ce serait un sacré bazar).

    Pour que ça fonctionne, il faudrait à la limite remplacer cette ligne par: var b=eval("i"+j);. De cette manière la chaîne de caractère serait interprétée comme du code Javascript et donc i0 vu comme la variable du même nom et remplacée par sa valeur.

    Mais, l'utilisation de eval est le petit signal qui doit te dire que tu t'y prends mal, et qu'il y a sûrement une manière bien plus simple et élégante d'arriver à tes fins (l'utilisation d'un tableau à la place de noms de variable numérotés?). N'ayant pas tous les tenants et aboutissants, je ne peux pas t'en dire plus.

    En parler sarthois, "renard" se dit "r’nâ".
    Merci pour ta réponse.
    Voici le code, qui fonctionne ! grâce à toi ! Maintenant si une solution plus propre existe, je ne demande qu'à apprendre
    En fait j'ai une quarantaine de cases (case0 ... case 40), et autant de chaines de caracteres (l0..l40)
    Encore merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <input id="case0" type="text" class="cinq" value="" />
    <input id="case1" type="text" class="cinq" value="" />
    <input id="case2" type="text" class="cinq" value="" />
    <input type="button" value="Vérifier"onClick="myFunction()"/>
     
    <script>
    var l0 = ["peintre jeune","jeune peintre"];
    var l1 = ["tableau du vieux peintre","peintre vieux","vieux peintre","sous la main"];
    var memo = [];
    function myFunction() {    
        for(var i=0; i<3; i++) {
            var a = document.getElementById("case" + i).value;
            var mem = memo.indexOf(a);
                 for(var n=0; n<2; n++) {
                   var b = eval("l"+n);
                   if(mem == -1) {
                        if(b.indexOf(a) !== -1 && a!="") {
                        document.getElementById("case" + i).style.backgroundColor="#4CE0D2";
                            for(var k=0; k<b.length; k++) {
                                memo.push(b[k]);
                                n = 2;}
    }
    }
    }
    }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser indexOf et les variables
    Par phpaide dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 24/05/2006, 15h59
  2. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  4. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo