diff --git a/PROCHAINE_ETAPE_contact_4.md b/PROCHAINE_ETAPE_contact_4.md new file mode 100644 index 0000000..52bd79c --- /dev/null +++ b/PROCHAINE_ETAPE_contact_4.md @@ -0,0 +1,144 @@ +# 🧠Niveau 5 — aller plus loin (mode indices) + +Salut Mélissa ! 👋 + +> 📌 À faire **une fois le Niveau 4 terminé** (`createElement`, `fetch`, `setInterval`, clavier). + +Petit changement de format à partir d'ici : **je ne donne plus le code tout fait.** Pour chaque exo tu as un **🎯 objectif**, des **🔍 pistes** (quoi chercher, quels mots-clés, les pièges) et un **✅ test**. À toi d'écrire le code. + +> 🔎 Tu as maintenant assez de bases pour lire la doc directement. Le réflexe : chercher **« MDN » + le nom de la chose** (ex. `MDN Array map`). Cherche d'abord **le concept**, le code viendra de toi. + +| Module | Notions visées | Exos | +|---|---|---| +| **A. Tableaux, niveau 2** | `map`, `find`, `reduce` | 1 → 3 | +| **B. Écouteurs malins** | délégation d'événements, anti-rebond | 4 → 5 | +| **C. Organiser son code** | modules `export` / `import` | 6 | +| **D. Une vraie API en ligne** | `fetch` vers le web réel | 7 | +| **E. Lire un formulaire d'un coup** | `FormData` | 8 | + +--- + +# 🧱 Module A — Les tableaux, niveau 2 + +Tu connais déjà `filter` (garder certains éléments) et `sort` (trier). Voici trois autres méthodes qui reviennent **tout le temps**. + +## 🧪 Exo 1 — `map` : transformer une liste + +**🎯 Objectif :** à partir de ton tableau `equipe`, fabriquer un **nouveau** tableau qui ne contient que les **noms** (`["Mélissa", "Guillaume"]`). + +**🔍 Pistes :** +- Cherche `MDN Array map`. L'idée : `map` applique une transformation à **chaque** élément et renvoie une **nouvelle** liste de même taille. +- Différence avec `filter` : `filter` **garde ou jette** des éléments (la liste rétrécit) ; `map` **transforme** chacun (la liste garde la même taille). + +**✅ Test :** un `console.log` affiche bien la liste des noms seuls. + +## 🧪 Exo 2 — `find` : retrouver un élément précis + +**🎯 Objectif :** retrouver dans `equipe` l'objet de la personne qui a fait la « Page contact ». + +**🔍 Pistes :** +- Cherche `MDN Array find`. `find` renvoie le **premier** élément qui remplit une condition (un seul objet, pas une liste). +- Attention au cas « personne ne correspond » : `find` renvoie alors `undefined` → comment l'éviter de planter ? (cherche `optional chaining` ou un simple `if`). + +**✅ Test :** `console.log` affiche le bon objet membre. + +## 🧪 Exo 3 — `reduce` : calculer un total + +**🎯 Objectif :** si tu as fait le `vehicules.json` du Niveau 4, calcule le **kilométrage total** de toute la flotte. + +**🔍 Pistes :** +- Cherche `MDN Array reduce`. C'est la méthode la plus abstraite des trois : elle « replie » toute une liste en **une seule valeur** (ici, une somme). +- Repère les deux choses qu'elle attend : une fonction `(accumulateur, élément) => ...` et une **valeur de départ** (pour une somme, laquelle ?). +- Si reduce te paraît trop dense au début, tu peux d'abord le faire avec une boucle `for...of` et une variable `total`, puis le réécrire en `reduce` pour comparer. + +**✅ Test :** le total affiché correspond à la somme des `km` de ton JSON. + +--- + +# 🎯 Module B — Des écouteurs d'événements plus malins + +## 🧪 Exo 4 — La délégation d'événements + +**🎯 Objectif :** rendre **chaque ligne** du tableau d'équipe cliquable (au clic, afficher le nom du membre dans une alerte). Le piège : tes lignes sont **générées** par JS, et parfois recréées (recherche, tri)… + +**🔍 Pistes :** +- L'approche naïve serait d'ajouter un écouteur sur chaque `