Chercher votre nom dans un tableau 7/7


#1

Bonjour à tous, je viens de terminer la série d'exercices intitulée "Cherche ton nom dans un tableau" :

https://www.codecademy.com/fr/courses/javascript-beginner-fr-FR-qr7ue/0/7?curriculum_id=5355c2b7516bcbd912000008

Au dernier exercice, il nous est demandé de trouver un moyen pour n'afficher que notre prénom.

J'y suis parvenu de façon un peu chanceuse avec indexOf et en ajoutant une condition. Je ne suis même pas certain de comprendre le fonctionnement de ce que j'ai ajouté.

Voici mon code :

/*jshint multistr:true */
var texte = "Canal + diffuse une série qui s'appelle acquitted et dont le personnage porte le même prénom que moi, Axel et pas Adel";
var monNom = "Axel";
var trouve = [];
var cherche = texte.indexOf("Axel");
for (var i=0; i<texte.length; i++) {
    if (texte[i] === "A") {
        for (var j=i; j<monNom.length+i; j++) {
            if (i === cherche) {
            trouve.push(texte[j])
            };
                    };
            };
};
if (trouve.length===0) {
    console.log("Votre nom n'a pas été trouvé !");
}
else {
    console.log(trouve);
};

Selon moi, voila comment ça fonctionne :
-la seconde boucle commence à tourner dès qu'un "A" est rencontré dans "texte"
-elle s'arrête de tourner dès qu'elle a compté les trois caractères après ce "A"
-la condition if vérifie si ces caractères sont précédés d'un "A" correspondant à Axel et n'envoie texte[j] dans le tableau que si c'est le cas.

Quelqu'un peut-il y jeter un oeil et me dire si mon raisonnement est bon ?

Merci

Axel


#2

Bonjour Axel, voici a peut près comment fonctionne ton code.

/*jshint multistr:true */
var texte = "Canal + diffuse une série qui s'appelle acquitted et dont le personnage porte le même prénom que moi, Axel et pas Adel";
var monNom = "Axel";
var trouve = [];
var cherche = texte.indexOf("Axel"); //retourne la position de la première lettre de la première occurrence de Axel
for (var i=0; i<texte.length; i++) { //i parcours tout le texte
    if (texte[i] === "A") { //Si il trouve un A
        for (var j=i; j<monNom.length+i; j++) { //j parcours les lettres adjacentes au A jusqu'à la longueur du nom
            if (i === cherche) { //si i est égale à la position de la premiere lettre de la première occurrence de Axel
            trouve.push(texte[j]) //Il met les lettres adjacentes au A dans trouve
            };
                    };
            };
};
if (trouve.length===0) {
    console.log("Votre nom n'a pas été trouvé !");
}
else {
    console.log(trouve);
};

En somme tu as eu un très bon réflexe en utilisant la méthode indexOf. En faite elle est tellement bien tombée qu'elle t'aurais épargné d'écrire tout ce code. Puisqu'elle retourne l'index de la premiere occurrence de Axel et par conséquant l'index de A, il te suffit juste de mettre dans trouve les lettres adjacentes à cette position... comme ceci:

var texte = "Canal + diffuse une série qui s'appelle acquitted et dont le personnage porte le même prénom que moi, Axel et pas Adel";
var monNom = "Axel";
var trouve = [];
var cherche = texte.indexOf("Axel");
if(cherche<0){ //.indexOf() retourne -1 si la chaîne de caractère recherchée n'a pas été trouvée
     console.log("Votre nom n'a pas été trouvé !");
}else{
    for (var i=cherche; i< cherche + monNom.length; i++) {
        trouve.push(texte[j]);
    }
    console.log(trouve);
};

Elisée.