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

  1. #21
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Moi, la première chose qui me vient à l'esprit c'est que l'utilisateur motivé peut tricher en affichant le code source de la page. D'où la question: est-ce que tu utilises un langage serveur comme le php? (ce qui permettrait de rendre inaccessible les listes de mots à l'utilisateur.)

    Autre chose, un utilisateur peut rentrer "deux 2" ou "livre livres" pour valider un champ. Ça n'est pas très probant. De même, si un utilisateur rentre "coupe papier", c'est valide alors que s'il rentre "coupe-papier" ça ne l'est plus.
    Peut-être faudrait-il envisager une structure de données plus complexe qui prendrait en compte différentes "versions" d'un même terme pour éviter ce problème de "faux-positif", et qui du même coup permettrait de pondérer certains termes comme par exemple "sablier" sans avoir à l'écrire deux fois dans la liste.

    Je réfléchirai à ça demain.

  2. #22
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Voilà ce que je te propose (j'ai séparé le html et le javascript pour avoir une coloration syntaxique correcte, il suffit de le coller):
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <title></title>
            <style>
    #instructions {
        font-weight: bold;
        text-align: center;
        padding: 15px;
        text-transform: uppercase;
    }
     
    #cases {
        border: none;
    }
     
    #cases > input {
        width: 30%;
        margin-left: 15px;
    }
            </style>
     
        </head>
        <body>
     
    <div>
    <p id="instructions">Inscrivez ci dessous les éléments dont vous vous rappelez concernant le tableau de Bailly.
                         </br>Soyez le plus précis possible !</p>
    <form>
        <fieldset id="cases">
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
            <input type="text" value=""/><input type="text" value=""/><input type="text" value=""/>
        </fieldset>
        <input type="button" value="Vérifier" id="check" />
    </form>
    </div>
    <script>
    /* le code Javascript */
    </script>
    </body>
    </html>

    Code Javascript : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    document.forms[0].reset();
     
    const cases = document.querySelectorAll('#cases input');
     
    const json = `[
        {"elts": ["peintre", "jeune"]},
        {"elts": ["tableau", "peintre", "vieux", "main"]},
        {"elts": ["tableau", "femme"]},
        {"elts": ["tableau", "homme", {"elts": ["barbe", "barbu"], "needed": 1}]},
        {"elts": ["tableau", "joueur", {"elts": ["luth", "mandoline", "guitare"], "needed": 1}]},
        {"elts": ["buste", "enfant", "sculpture", "antique"]},
        {"elts": [{"elts":["statue", "sculpture"], "needed": 1}, "homme", "esclave"]},
        {"elts": ["palette", {"elts": ["peinture", "peintures"], "needed": 1}, "couleurs", "esclave"]},
        {"elts": ["trois", "bulles", {"elts": ["volent", "flottent"], "needed": 1}, "savon"]},
        {"elts": ["sablier"], "needed": 1}
    ]`;
     
    const lists = JSON.parse(json);
     
    const defaultPoints = 1; // par défaut un mot donne un point
    const defaultNeeded = 2; // par défaut il faut au moins 2 points pour valider une liste
     
    function check(wordSet, list) {
     
        const points = list.points || defaultPoints; // nombre de points pour 1 item correspondant
        const needed = list.needed || defaultNeeded; // nombre de points nécessaires pour valider la liste courante
     
        let totalScore = 0;
     
        for (const item of list.elts) {
            if ( typeof item === 'string' ) { // l'item est une chaîne
                if ( wordSet.has(item) ) // si l'item est dans la case, on augmente le score
                    totalScore += points;
     
            } else { // l'item est un objet (une liste), on appelle récursivement la fonction
                if ( check(wordSet, item) ) // si elle renvoie "true", on augmente le score
                    totalScore += points;
     
            }
        }
     
        return totalScore >= needed; // renvoie "true" lorsque le score nécessaire est atteint.
    }
     
    document.getElementById('check').addEventListener('click', e => {
        for (const c of cases) {
            let wordSet = new Set(c.value.toLowerCase().match(/[\wàâäéèêîïôöùûüÿçæœ]+(?:-[\wàâäéèêîïôöùûüÿçæœ]+)*/g));
     
            if ( ! wordSet.size ) // la case est vide, on passe à la suivante
                continue;
     
            let found = false;
     
            for (const list of lists) {
                if ( check(wordSet, list) ) {
                    c.style.backgroundColor = '#4CE0D2';
                    found = true;
                    break; // dés qu'une liste correspond on interrompt la boucle
                } 
            }
     
            if ( ! found )
                c.style.backgroundColor = '#FF6666';
     
        }
    }, false);

    L'idée est de stocker les listes de mots dans du JSON. Cela permet plus de souplesse et notamment de faire face aux subtilités que j'ai évoquées dans mon post précédent. Voyons ça de plus prés.

    Pour un cas simple comme la liste: "buste", "enfant", "sculpture", "antique", pas de difficulté, on créé le json suivant: {"elts": ["buste", "enfant", "sculpture", "antique"], "needed": 2, "points": 1}. La clef "elts" est associée à un tableau dont les items sont chacun des mots, la clef "points" donne le nombre de points à chaque mot correspondant (donc ici 1 mot = 1 point), quant à la clef "needed", elle donne le nombre de points nécessaires pour valider la liste (donc 2 points, soit 2 mots correspondants).

    Pour alléger le json, et comme la plupart du temps 1 mot = 1 point et que 2 points sont nécessaires, j'ai créé des constantes par défaut (defaultPoints et defaultNeeded) de manière à ce que quand les clefs "points" ou "needed" sont manquantes, ces valeurs par défaut soient utilisées.

    Quel est l'intérêt de ce système de points biscornu?

    Et bien, c'est justement pour les cas plus ardus:
    • liste avec un élément unique:"sablier".
      Dans ce cas, vu qu'il n'y a qu'un seul mot, pour valider la liste, on a deux solutions possibles, soit on réduit le nombre de points nécessaires à la validation: {"elts": ["sablier"], "needed": 1}, soit on augmente le nombre de points: {"elts": ["sablier"], "points": 2} pour une correspondance.
    • liste avec des items équivalents: "tableau", "homme", "barbe", "barbu".
      "barbe" et "barbu" relève de la même idée, il serait curieux de valider une case contenant juste ces deux mots. Dans ce cas, il suffit de les remplacer par un objet json (une autre liste), pour donner: {"elts": ["tableau", "homme", {"elts": ["barbe", "barbu"], "needed": 1}]}.
      Dans ce cas de figure la fonction check s'appelle elle-même pour comparer les mots de la case avec cette liste imbriquée. Si cet appel récursif renvoie "true" les points sont attribués, dans le cas contraire, ils ne le sont pas.
      À noter qu'il n'y a pas de limite au niveau d'imbrication, par exemple rien n'empêche de faire: {"elts": ["tableau", "homme", {"elts": ["barbe", "barbu", {"elts": ["poils", "sur", "visage"], "needed": 3}], "needed": 1}]}


    Dans la même veine, on pourrait envisager avec des modifications minimes sur l'algorithme de faire une liste pondérée (si on souhaite que certains termes soient mieux rétribués que d'autres).

  3. #23
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Un grand merci.. je vais regarder ca.

  4. #24
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Il manque encore un système pour empêcher de répondre plusieurs fois la même chose (donc un système qui élimine une liste lorsque qu'une case correspond déjà à celle-ci), je vais voir ça plus tard.

    Ci-joint la ligne du coupe-papier: {"elts": [{"elts": [{"elts": ["coupe", {"elts": ["papier", "lettre"], "needed": 1}]}, "coupe-papier", "couteau"], "needed": 1}, "table"]}

  5. #25
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Il suffit d'ajouter une propriété frozen à chaque liste, ce qui change juste un peu cette partie du code:

    Code Javascript : 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
    28
    29
    30
    document.getElementById('check').addEventListener('click', e => {
        for (const list of lists) { // on défreeze toutes les listes
            list.frozen = false;
        }
     
        for (const c of cases) {
            let wordSet = new Set(c.value.toLowerCase().match(/[\wàâäéèêîïôöùûüÿçæœ]+(?:-[\wàâäéèêîïôöùûüÿçæœ]+)*/g));
     
            if ( ! wordSet.size ) // la case est vide, on passe à la suivante
                continue;
     
            let found = false;
     
            for (const list of lists) {
                if ( list.frozen )
                    continue;
     
                if ( check(wordSet, list) ) {
                    c.style.backgroundColor = '#4CE0D2';
                    found = true;
                    list.frozen = true; // cette liste a été validée, on la freeze.
                    break; // dés qu'une liste correspond on interrompt la boucle
                } 
            }
     
            if ( ! found )
                c.style.backgroundColor = '#FF6666';
     
        }
    }, false);

  6. #26
    DMC
    DMC est déconnecté
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2002
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Bonjour Charal72,

    Voila une exemple en espérant que j'ai bien compris

    https://codepen.io/Zonecss/pen/qwQbrB

  7. #27
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Que dire??... J'ai encore pas mal de progrès à faire !
    Je vais passer quelques heures à comprendre ton code..mais pas de problème: il est nickel! Encore merci (et à bientôt..)
    Et je viens de regarder celui, de DMC qui semble également pas mal.. 2 façons de faire différentes ! le top !

  8. #28
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Concernant DMC: le code ne prends pas en compte le fait qu'il faut au moins 2 éléments pour valider la réponse. (peintre ne suffit pas, il faut ajouter jeune, par ex..)
    Pour Cosmo: Impeccable..sauf que si je veux rajouter des [], le code ne fonctionne plus..?? je vais essayer de comprendre ..mais bon, si tu as la réponse..merci encore

  9. #29
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Citation Envoyé par Charal72
    Impeccable..sauf que si je veux rajouter des [], le code ne fonctionne plus..??
    Est-ce que tu peux être plus clair? Des crochets où ça et pourquoi faire?

  10. #30
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Ajouter des {"elts": ["", ""]}

  11. #31
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Il n'y a pas de difficulté particulière à le faire, tu dois juste veiller à bien respecter la syntaxe (bien appairer les crochets et accolades, séparer éléments d'une virgule), car la moindre erreur de ce coté provoque une erreur de parsing du JSON. Si tu n'arrives pas à voir l'erreur que tu as commise tu peux toujours poster ce que tu as fait.

    (NB: pour avoir la confirmation qu'il s'agit bien d'une erreur de syntaxe dans le JSON, utilise les outils de développements de ton navigateur et affiche la console: dans ce cas elle te signalera une erreur au niveau de la ligne const lists = JSON.parse(json);)

  12. #32
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    J'ai tout bien regardé... quelque chose m'échappe..(une de plus!)
    voici le code js (je n'ai rien odifié d'autre que les elts
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    <script>
    document.forms[0].reset();
     
    const cases = document.querySelectorAll('#cases input');
     
    const json = `[
        {"elts": ["peintre", "jeune"]},
        {"elts": ["tableau", "peintre", "vieux", "main"]},
        {"elts": ["tableau", "femme"]},
        {"elts": ["tableau", "homme", {"elts": ["barbe", "barbu"], "needed": 1}]},
        {"elts": ["tableau", "joueur", {"elts": ["luth", "mandoline", "guitare"], "needed": 1}]},
        {"elts": ["buste", "enfant", "sculpture", "antique"]},
        {"elts": [{"elts":["statue", "sculpture"], "needed": 1}, "homme", "esclave"]},
        {"elts": ["palette", {"elts": ["peinture", "peintures"], "needed": 1}, "couleurs", "effacées"]},
        {"elts": ["trois", "bulles", {"elts": ["volent", "flottent"], "needed": 1}, "savon"]},
        {"elts": ["sablier"], "needed": 1},
        {"elts": ["parchemin"], "needed": 1},
        {"elts": ["vase"], "needed": 1},
        {"elts": ["crane", "crâne"], "needed": 1},
        {"elts": [{"elts":["canne", "baton", baguette"], "needed": 1}, "personnage", "tenue", "peintre"]},
        {"elts": [{"elts": [{"elts": ["coupe", {"elts": ["papier", "lettre"], "needed": 1}]}, "coupe-papier", "couteau"], "needed": 1}, "table"]},
        {"elts": ["flute", "flûte"], "needed": 1},
        {"elts": ["perle", {"elts": ["colliers", "collier"], "needed": 1}]},
        {"elts": ["petit", "coffret", "couvercle", "ouvert"]},
        {"elts": ["deux", "livres", "livre", "table", "2"]},
        {"elts": ["trois", "3", "roses", "vase", "table"]},
        {"elts": ["table"], "needed": 1},
        {"elts": ["rideau", "rideaux"], "needed": 1},
        {"elts": [verre", "moitié", "rempli", "vin", "blanc", "flute", "champagne"]},
        {"elts": ["monnaie", {"elts": ["pièce", "pièces"], "needed": 1}]},
        {"elts": [{"elts": ["brûle parfum", "brûle-parfum"], "needed": 1}]},
        {"elts": ["vase", "renversé", "tombé"]},
        {"elts": ["bougie", "éteinte", {"elts": ["bougeoir"], "needed": 1}]},
        {"elts": ["nappe", "table"]},
        {"elts": ["papier", "texte", "écrit", "plié", "bord", "écriture"]},
        {"elts": ["papier", "tombe", "table", "vole", "petit", "blanc"]}
    ]`;
    const lists = JSON.parse(json);
     
    const defaultPoints = 1; // par défaut un mot donne un point
    const defaultNeeded = 2; // par défaut il faut au moins 2 points pour valider une liste
     
    function check(wordSet, list) {
     
        const points = list.points || defaultPoints; // nombre de points pour 1 item correspondant
        const needed = list.needed || defaultNeeded; // nombre de points nécessaires pour valider la liste courante
     
        let totalScore = 0;
     
        for (const item of list.elts) {
            if ( typeof item === 'string' ) { // l'item est une chaîne
                if ( wordSet.has(item) ) // si l'item est dans la case, on augmente le score
                    totalScore += points;
     
            } else { // l'item est un objet (une liste), on appelle récursivement la fonction
                if ( check(wordSet, item) ) // si elle renvoie "true", on augmente le score
                    totalScore += points;
     
            }
        }
     
        return totalScore >= needed; // renvoie "true" lorsque le score nécessaire est atteint.
    }
     
    document.getElementById('check').addEventListener('click', e => {
        for (const list of lists) { // on défreeze toutes les listes
            list.frozen = false;
        }
     
        for (const c of cases) {
            let wordSet = new Set(c.value.toLowerCase().match(/[\wàâäéèêîïôöùûüÿçæœ]+(?:-[\wàâäéèêîïôöùûüÿçæœ]+)*/g));
     
            if ( ! wordSet.size ) // la case est vide, on passe à la suivante
                continue;
     
            let found = false;
     
            for (const list of lists) {
                if ( list.frozen )
                    continue;
     
                if ( check(wordSet, list) ) {
                    c.style.backgroundColor = '#4CE0D2';
                    found = true;
                    list.frozen = true; // cette liste a été validée, on la freeze.
                    break; // dés qu'une liste correspond on interrompt la boucle
                } 
            }
     
            if ( ! found )
                c.style.backgroundColor = '#FF6666';
     
        }
    }, false);
    </script>

  13. #33
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Il manque un double-quote " avant le mot verre ligne 30.

    Dans ce genre de situation, pour débusquer l'erreur facilement, tu peux:
    • utiliser un éditeur avec coloration syntaxique (notepad++, gedit, pspad, visual studio code..., indispensable quand on programme) et tu composes ton json à part dans un nouveau fichier que tu enregistres en .json, comme ça tu verras tout de suite les accolades, crochets ou quotes manquants. Puis quand il est au point, tu n'as plus qu'à le coller dans ton code javascript.
    • utiliser la dichotomie (tu enlèves la moitié de ce que tu as mis, si l'erreur persiste tu enlèves la moitié de la moitié restante etc., si l'erreur disparaît tu ajoutes la moitié de ce que tu viens de retirer etc.) pour réduire le champ de recherche.


    Pour le brûle-parfum, ça ne marchera pas comme ça {"elts": [{"elts": ["brûle parfum", "brûle-parfum"], "needed": 1}]} car la recherche dans la liste se fait un mot de la case à la fois donc brûle parfum (sans tiret) ne sera jamais trouvé. Pour que ça fonctionne, il faudrait faire:{"elts": [{"elts": ["brûle", "parfum"]}, "brûle-parfum"], "needed": 1}
    Juste pour l'exemple, si je veux rajouter renversé (mais pas flacon qui lui serait plutôt un "synonyme" de brûle-parfum), cela m'oblige à rajouter un niveau:{"elts": [{"elts": [{"elts": ["brûle", "parfum"]}, "brûle-parfum"], "needed": 1}, "renversé"]}.

    Pour éviter d'étendre le code sur je ne sais combien de lignes j'ai écrit chaque liste sur une seule ligne, mais dans ta phase d'écriture du json, rien ne t'empêche de l'indenter sur plusieurs lignes pour y voir plus clair:
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
        "elts": [
            {
                "elts": [
                    {
                        "elts": ["brûle", "parfum"]
                    },
                    "brûle-parfum"
                ],
                "needed": 1
            },
            "renversé"
        ]
    }

  14. #34
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Comme éditeur j'utilise brackets..mais pas d'indication.. Ca ne fonctionne toujours pas..

  15. #35
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Il y a aussi baguette ligne 21.

  16. #36
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Merci Cosmo !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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