You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/fr/2-js-basics/4-arrays-loops/README.md

741 lines
31 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Les bases de JavaScript : Tableaux et Boucles
![Les bases de JavaScript - Tableaux](../../../../translated_images/fr/webdev101-js-arrays.439d7528b8a29455.webp)
> Sketchnote par [Tomomi Imura](https://twitter.com/girlie_mac)
```mermaid
journey
title Votre Aventure avec les Tableaux & Boucles
section Fondamentaux des Tableaux
Création de Tableaux: 5: You
Accès aux Éléments: 4: You
Méthodes de Tableaux: 5: You
section Maîtrise des Boucles
Boucles For: 4: You
Boucles While: 5: You
Syntaxe Moderne: 4: You
section Traitement des Données
Tableaux + Boucles: 5: You
Applications Réelles: 4: You
Optimisation des Performances: 5: You
```
## Quiz avant la leçon
[Quiz avant la leçon](https://ff-quizzes.netlify.app/web/quiz/13)
Vous vous êtes déjà demandé comment les sites web suivent les articles dans un panier ou affichent votre liste d'amis ? C'est là que les tableaux et les boucles interviennent. Les tableaux sont comme des conteneurs numériques qui contiennent plusieurs informations, tandis que les boucles vous permettent de travailler efficacement avec toutes ces données sans écrire un code répétitif.
Ensemble, ces deux concepts forment la base pour manipuler l'information dans vos programmes. Vous apprendrez à passer de l'écriture manuelle de chaque étape à la création d'un code intelligent et efficace capable de traiter des centaines voire des milliers d'éléments rapidement.
À la fin de cette leçon, vous comprendrez comment accomplir des tâches complexes avec juste quelques lignes de code. Explorons ces concepts essentiels de la programmation.
[![Tableaux](https://img.youtube.com/vi/1U4qTyq02Xw/0.jpg)](https://youtube.com/watch?v=1U4qTyq02Xw "Tableaux")
[![Boucles](https://img.youtube.com/vi/Eeh7pxtTZ3k/0.jpg)](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Boucles")
> 🎥 Cliquez sur les images ci-dessus pour des vidéos sur les tableaux et les boucles.
> Vous pouvez suivre cette leçon sur [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-arrays/?WT.mc_id=academic-77807-sagibbon) !
```mermaid
mindmap
root((Traitement des données))
Arrays
Structure
Syntaxe des crochets carrés
Indexation à base zéro
Dimensionnement dynamique
Operations
push/pop
shift/unshift
indexOf/includes
Types
Tableau de nombres
Tableau de chaînes
Types mixtes
Loops
For Loops
Comptage des itérations
Traitement des tableaux
Flux prévisible
While Loops
Basé sur une condition
Itérations inconnues
Entrée utilisateur
Modern Syntax
for...of
forEach
Méthodes fonctionnelles
Applications
Data Analysis
Statistiques
Filtrage
Transformations
User Interfaces
Listes
Menus
Galeries
```
## Tableaux
Pensez aux tableaux comme à un classeur numérique - au lieu de ranger un document par tiroir, vous pouvez organiser plusieurs éléments liés dans un seul conteneur structuré. En termes de programmation, les tableaux vous permettent de stocker plusieurs informations dans un seul paquet organisé.
Que vous construisiez une galerie photo, gériez une liste de tâches ou suiviez les meilleurs scores d'un jeu, les tableaux sont la base de l'organisation des données. Voyons comment ils fonctionnent.
✅ Les tableaux sont partout autour de nous ! Pouvez-vous penser à un exemple réel de tableau, comme une installation de panneaux solaires ?
### Création de Tableaux
Créer un tableau est super simple - il suffit d'utiliser des crochets !
```javascript
// Tableau vide - comme un panier d'achat vide attendant des articles
const myArray = [];
```
**Que se passe-t-il ici ?**
Vous venez de créer un conteneur vide avec ces crochets `[]`. Pensez-y comme à une étagère de bibliothèque vide - elle est prête à contenir les livres que vous souhaitez y organiser.
Vous pouvez aussi remplir votre tableau avec des valeurs initiales dès le départ :
```javascript
// Le menu des parfums de votre glacier
const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];
// Les infos du profil d'un utilisateur (mélange de différents types de données)
const userData = ["John", 25, true, "developer"];
// Notes de test pour votre cours préféré
const scores = [95, 87, 92, 78, 85];
```
**Choses intéressantes à noter :**
- Vous pouvez stocker du texte, des nombres, ou même des valeurs vrai/faux dans le même tableau
- Il suffit de séparer chaque élément par une virgule - facile !
- Les tableaux sont parfaits pour garder les informations liées ensemble
```mermaid
flowchart LR
A["📦 Tableaux"] --> B["Créer [ ]"]
A --> C["Stocker Plusieurs Éléments"]
A --> D["Accéder par Index"]
B --> B1["const arr = []"]
B --> B2["const arr = [1,2,3]"]
C --> C1["Nombres"]
C --> C2["Chaînes"]
C --> C3["Booléens"]
C --> C4["Types Mixtes"]
D --> D1["arr[0] = premier"]
D --> D2["arr[1] = deuxième"]
D --> D3["arr[2] = troisième"]
E["📊 Index de Tableau"] --> E1["Index 0 : Premier"]
E --> E2["Index 1 : Deuxième"]
E --> E3["Index 2 : Troisième"]
E --> E4["Index n-1 : Dernier"]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
```
### Indexation dans les Tableaux
Voici quelque chose qui peut sembler inhabituel au début : les tableaux numérotent leurs éléments à partir de 0, pas de 1. Cette indexation à base zéro vient de la manière dont fonctionne la mémoire informatique - cest une convention de programmation depuis les premiers jours des langages comme le C. Chaque emplacement dans le tableau reçoit un numéro d'adresse appelé **index**.
| Index | Valeur | Description |
|-------|--------|-------------|
| 0 | "Chocolat" | Premier élément |
| 1 | "Fraise" | Deuxième élément |
| 2 | "Vanille" | Troisième élément |
| 3 | "Pistache" | Quatrième élément |
| 4 | "Rocky Road" | Cinquième élément |
✅ Cela vous surprend-il que les tableaux commencent à lindex zéro ? Dans certains langages, les index commencent à 1. Il y a une histoire intéressante à ce sujet, que vous pouvez [lire sur Wikipédia](https://en.wikipedia.org/wiki/Zero-based_numbering).
**Accéder aux éléments dun tableau :**
```javascript
const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];
// Accéder aux éléments individuels en utilisant la notation entre crochets
console.log(iceCreamFlavors[0]); // "Chocolat" - premier élément
console.log(iceCreamFlavors[2]); // "Vanille" - troisième élément
console.log(iceCreamFlavors[4]); // "Rocky Road" - dernier élément
```
**Décomposons ce qui se passe :**
- **Utilise** la notation avec crochets et lindex pour accéder aux éléments
- **Renvoie** la valeur stockée à cette position spécifique dans le tableau
- **Commence** à compter à partir de 0, ce qui fait que le premier élément a lindex 0
**Modifier des éléments dun tableau :**
```javascript
// Modifier une valeur existante
iceCreamFlavors[4] = "Butter Pecan";
console.log(iceCreamFlavors[4]); // "Noix de beurre"
// Ajouter un nouvel élément à la fin
iceCreamFlavors[5] = "Cookie Dough";
console.log(iceCreamFlavors[5]); // "Pâte à biscuits"
```
**Ici, nous avons :**
- **Modifié** lélément à lindex 4 de "Rocky Road" à "Butter Pecan"
- **Ajouté** un nouvel élément "Cookie Dough" à lindex 5
- **Élargi** automatiquement la longueur du tableau en ajoutant au-delà des limites actuelles
### Longueur du tableau et méthodes communes
Les tableaux comportent des propriétés et méthodes intégrées qui rendent le travail avec les données bien plus facile.
**Trouver la longueur dun tableau :**
```javascript
const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];
console.log(iceCreamFlavors.length); // 5
// La longueur se met à jour automatiquement lorsque le tableau change
iceCreamFlavors.push("Mint Chip");
console.log(iceCreamFlavors.length); // 6
```
**Points clés à retenir :**
- **Renvoie** le nombre total déléments dans le tableau
- **Se met à jour** automatiquement quand des éléments sont ajoutés ou supprimés
- **Fournit** un décompte dynamique utile pour les boucles et validations
**Méthodes essentielles des tableaux :**
```javascript
const fruits = ["apple", "banana", "orange"];
// Ajouter des éléments
fruits.push("grape"); // Ajoute à la fin : ["pomme", "banane", "orange", "raisin"]
fruits.unshift("strawberry"); // Ajoute au début : ["fraise", "pomme", "banane", "orange", "raisin"]
// Supprimer des éléments
const lastFruit = fruits.pop(); // Supprime et retourne "raisin"
const firstFruit = fruits.shift(); // Supprime et retourne "fraise"
// Trouver des éléments
const index = fruits.indexOf("banana"); // Retourne 1 (position de "banane")
const hasApple = fruits.includes("apple"); // Retourne vrai
```
**Comprendre ces méthodes :**
- **Ajoute** des éléments avec `push()` (à la fin) et `unshift()` (au début)
- **Supprime** des éléments avec `pop()` (à la fin) et `shift()` (au début)
- **Localise** des éléments avec `indexOf()` et vérifie lexistence avec `includes()`
- **Renvoie** des valeurs utiles comme les éléments supprimés ou les positions
✅ Essayez par vous-même ! Utilisez la console de votre navigateur pour créer et manipuler un tableau de votre propre création.
### 🧠 **Contrôle des fondations des tableaux : Organiser vos données**
**Testez votre compréhension des tableaux :**
- Pourquoi pensez-vous que les tableaux commencent à compter à partir de 0 plutôt que 1 ?
- Que se passe-t-il si vous essayez daccéder à un index qui nexiste pas (comme `arr[100]` dans un tableau de 5 éléments) ?
- Pouvez-vous penser à trois scénarios réels où les tableaux seraient utiles ?
```mermaid
stateDiagram-v2
[*] --> EmptyArray: const arr = []
EmptyArray --> WithItems: Ajouter des éléments
WithItems --> Accessing: Utiliser les index
Accessing --> Modifying: Modifier les valeurs
Modifying --> Processing: Utiliser des méthodes
WithItems --> WithItems: push(), unshift()
Processing --> Processing: pop(), shift()
note right of Accessing
Indexation à base zéro
arr[0] = premier élément
end note
note right of Processing
Méthodes intégrées
Opérations dynamiques
end note
```
> **Aperçu du monde réel** : Les tableaux sont partout en programmation ! Flux des réseaux sociaux, paniers dachats, galeries photo, chansons de playlists - ce sont tous des tableaux en coulisses !
## Boucles
Pensez à la célèbre punition dans les romans de Charles Dickens où les élèves devaient écrire plusieurs fois la même phrase sur une ardoise. Imaginez si vous pouviez simplement ordonner à quelquun d« écrire cette phrase 100 fois » et que cela soit fait automatiquement. Cest exactement ce que font les boucles pour votre code.
Les boucles sont comme un assistant infatigable qui répète les tâches sans erreur. Que vous ayez besoin de vérifier chaque article dans un panier ou dafficher toutes les photos dun album, les boucles gèrent la répétition efficacement.
JavaScript offre plusieurs types de boucles. Voyons chacune et comprenons quand les utiliser.
```mermaid
flowchart TD
A["🔄 Types de Boucles"] --> B["Boucle For"]
A --> C["Boucle While"]
A --> D["Boucle For...of"]
A --> E["Méthode forEach"]
B --> B1["Itérations connues"]
B --> B2["Basé sur un compteur"]
B --> B3["for(init; condition; incrément)"]
C --> C1["Itérations inconnues"]
C --> C2["Basé sur une condition"]
C --> C3["while(condition)"]
D --> D1["ES6+ Moderne"]
D --> D2["Itération de tableau"]
D --> D3["for(élément de tableau)"]
E --> E1["Style fonctionnel"]
E --> E2["Méthode de tableau"]
E --> E3["tableau.forEach(callback)"]
F["⏰ Quand Utiliser"] --> F1["For : Comptage, index"]
F --> F2["While : Entrée utilisateur, recherche"]
F --> F3["For...of : Itération simple"]
F --> F4["forEach : Programmation fonctionnelle"]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
style F fill:#fce4ec
```
### Boucle For
La boucle `for` est comme régler un minuteur - vous savez exactement combien de fois vous voulez que quelque chose se produise. Elle est super organisée et prévisible, ce qui la rend parfaite quand vous travaillez avec des tableaux ou que vous devez compter des éléments.
**Structure dune boucle For :**
| Composant | But | Exemple |
|-----------|-----|---------|
| **Initialisation** | Définit le point de départ | `let i = 0` |
| **Condition** | Quand continuer | `i < 10` |
| **Incrémentation** | Comment mettre à jour | `i++` |
```javascript
// Compter de 0 à 9
for (let i = 0; i < 10; i++) {
console.log(`Count: ${i}`);
}
// Exemple plus pratique : traitement des scores
const testScores = [85, 92, 78, 96, 88];
for (let i = 0; i < testScores.length; i++) {
console.log(`Student ${i + 1}: ${testScores[i]}%`);
}
```
**Étape par étape, voici ce qui se passe :**
- **Initialise** la variable compteur `i` à 0 au début
- **Vérifie** la condition `i < 10` avant chaque itération
- **Exécute** le bloc de code lorsque la condition est vraie
- **Incrémente** `i` de 1 après chaque itération avec `i++`
- **Sarrête** lorsque la condition devient fausse (quand `i` atteint 10)
✅ Essayez ce code dans la console dun navigateur. Que se passe-t-il quand vous modifiez légèrement le compteur, la condition ou lexpression ditération ? Pouvez-vous le faire tourner à lenvers, créant un compte à rebours ?
### 🗓️ **Contrôle de maîtrise des boucles For : Répétition contrôlée**
**Évaluez votre compréhension des boucles for :**
- Quelles sont les trois parties dune boucle for, et que fait chacune ?
- Comment parcourir un tableau à lenvers ?
- Que se passe-t-il si vous oubliez la partie incrémentation (`i++`) ?
```mermaid
flowchart TD
A["🚀 Début de la boucle For"] --> B["Initialiser : let i = 0"]
B --> C{"Condition : i < array.length ?"}
C -->|true| D["Exécuter le bloc de code"]
D --> E["Incrémenter : i++"]
E --> C
C -->|false| F["✅ Sortie de la boucle"]
G["📋 Modèles courants"] --> G1["for(let i=0; i<n; i++)"]
G --> G2["for(let i=n-1; i>=0; i--)"]
G --> G3["for(let i=0; i<arr.length; i+=2)"]
style A fill:#e3f2fd
style F fill:#e8f5e8
style G fill:#fff3e0
```
> **Sagesse sur les boucles** : Les boucles for sont parfaites quand vous savez exactement combien de fois vous devez répéter quelque chose. Elles sont le choix le plus courant pour traiter des tableaux !
### Boucle While
La boucle `while` est comme dire « continue à faire ceci tant que... » - vous ne savez peut-être pas exactement combien de fois elle tournera, mais vous savez quand arrêter. Elle est parfaite pour des choses comme demander une entrée utilisateur jusquà ce quil donne ce dont vous avez besoin, ou chercher dans des données jusquà trouver ce que vous cherchez.
**Caractéristiques de la boucle While :**
- **Continue** dexécuter tant que la condition est vraie
- **Nécessite** la gestion manuelle des variables compteur
- **Vérifie** la condition avant chaque itération
- **Risques** de boucles infinies si la condition ne devient jamais fausse
```javascript
// Exemple basique de comptage
let i = 0;
while (i < 10) {
console.log(`While count: ${i}`);
i++; // N'oubliez pas d'incrémenter !
}
// Exemple plus pratique : traitement de la saisie utilisateur
let userInput = "";
let attempts = 0;
const maxAttempts = 3;
while (userInput !== "quit" && attempts < maxAttempts) {
userInput = prompt(`Enter 'quit' to exit (attempt ${attempts + 1}):`);
attempts++;
}
if (attempts >= maxAttempts) {
console.log("Maximum attempts reached!");
}
```
**Comprendre ces exemples :**
- **Gère** manuellement la variable compteur `i` à lintérieur du corps de la boucle
- **Incrémente** le compteur pour éviter les boucles infinies
- **Montre** un cas dusage pratique avec saisie utilisateur et limite de tentatives
- **Inclut** des mécanismes de sécurité pour prévenir une exécution sans fin
### ♾️ **Contrôle de sagesse sur la boucle While : Répétition basée sur une condition**
**Testez votre compréhension des boucles while :**
- Quel est le principal danger en utilisant les boucles while ?
- Quand choisiriez-vous une boucle while plutôt quune boucle for ?
- Comment éviter les boucles infinies ?
```mermaid
flowchart LR
A["🔄 While vs For"] --> B["Boucle While"]
A --> C["Boucle For"]
B --> B1["Itérations inconnues"]
B --> B2["Basé sur une condition"]
B --> B3["Saisie utilisateur, recherche"]
B --> B4["⚠️ Risque : boucles infinies"]
C --> C1["Itérations connues"]
C --> C2["Basé sur un compteur"]
C --> C3["Traitement de tableau"]
C --> C4["✅ Sûr : fin prévisible"]
D["🛡️ Conseils de sécurité"] --> D1["Toujours modifier la variable de condition"]
D --> D2["Inclure des conditions d'échappement"]
D --> D3["Définir des limites maximales d'itérations"]
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e8
style D fill:#ffebee
```
> **Sécurité avant tout** : Les boucles while sont puissantes mais demandent une gestion attentive des conditions. Assurez-vous toujours que votre condition de boucle finira par devenir fausse !
### Alternatives modernes aux boucles
JavaScript offre une syntaxe de boucles moderne qui peut rendre votre code plus lisible et moins sujet aux erreurs.
**Boucle For...of (ES6+) :**
```javascript
const colors = ["red", "green", "blue", "yellow"];
// Approche moderne - plus propre et plus sûre
for (const color of colors) {
console.log(`Color: ${color}`);
}
// Comparer avec une boucle for traditionnelle
for (let i = 0; i < colors.length; i++) {
console.log(`Color: ${colors[i]}`);
}
```
**Avantages clés de for...of :**
- **Élimine** la gestion des index et les erreurs hors limites
- **Donne** un accès direct aux éléments du tableau
- **Améliore** la lisibilité du code et réduit la complexité syntaxique
**Méthode forEach :**
```javascript
const prices = [9.99, 15.50, 22.75, 8.25];
// Utilisation de forEach pour un style de programmation fonctionnelle
prices.forEach((price, index) => {
console.log(`Item ${index + 1}: $${price.toFixed(2)}`);
});
// forEach avec des fonctions fléchées pour des opérations simples
prices.forEach(price => console.log(`Price: $${price}`));
```
**Ce quil faut savoir sur forEach :**
- **Exécute** une fonction pour chaque élément du tableau
- **Fournit** la valeur de lélément et son index en paramètres
- **Ne peut pas** être arrêtée prématurément (contrairement aux boucles traditionnelles)
- **Renvoie** undefined (ne crée pas un nouveau tableau)
✅ Pourquoi choisir une boucle for plutôt quune boucle while ? 17 000 personnes se sont posé la même question sur StackOverflow, et certaines opinions [pourraient vous intéresser](https://stackoverflow.com/questions/39969145/while-loops-vs-for-loops-in-javascript).
### 🎨 **Contrôle de syntaxe moderne : Sapproprier ES6+**
**Évaluez votre compréhension moderne de JavaScript :**
- Quels sont les avantages de `for...of` par rapport aux boucles for traditionnelles ?
- Quand préféreriez-vous encore les boucles for traditionnelles ?
- Quelle est la différence entre `forEach` et `map` ?
```mermaid
quadrantChart
title Guide de sélection de boucle
x-axis Traditionnel --> Moderne
y-axis Simple --> Complexe
quadrant-1 Moderne Complexe
quadrant-2 Traditionnel Complexe
quadrant-3 Traditionnel Simple
quadrant-4 Moderne Simple
Traditional For: [0.2, 0.7]
While Loop: [0.3, 0.6]
For...of: [0.8, 0.3]
forEach: [0.9, 0.4]
Array Methods: [0.8, 0.8]
```
> **Tendance moderne** : Les syntaxes ES6+ comme `for...of` et `forEach` deviennent les approches préférées pour litération sur les tableaux car elles sont plus propres et moins sujettes aux erreurs !
## Boucles et tableaux
La combinaison de tableaux avec les boucles crée des capacités puissantes de traitement des données. Ce duo est fondamental pour de nombreuses tâches en programmation, de laffichage des listes au calcul de statistiques.
**Traitement traditionnel des tableaux :**
```javascript
const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];
// Approche classique avec la boucle for
for (let i = 0; i < iceCreamFlavors.length; i++) {
console.log(`Flavor ${i + 1}: ${iceCreamFlavors[i]}`);
}
// Approche moderne avec la boucle for...of
for (const flavor of iceCreamFlavors) {
console.log(`Available flavor: ${flavor}`);
}
```
**Comprenons chaque approche :**
- **Utilise** la propriété length du tableau pour déterminer les limites de la boucle
- **Accède** aux éléments par index dans les boucles for traditionnelles
- **Fournit** laccès direct aux éléments dans les boucles for...of
- **Traite** chaque élément du tableau une seule fois
**Exemple pratique de traitement des données :**
```javascript
const studentGrades = [85, 92, 78, 96, 88, 73, 89];
let total = 0;
let highestGrade = studentGrades[0];
let lowestGrade = studentGrades[0];
// Traiter toutes les notes avec une seule boucle
for (let i = 0; i < studentGrades.length; i++) {
const grade = studentGrades[i];
total += grade;
if (grade > highestGrade) {
highestGrade = grade;
}
if (grade < lowestGrade) {
lowestGrade = grade;
}
}
const average = total / studentGrades.length;
console.log(`Average: ${average.toFixed(1)}`);
console.log(`Highest: ${highestGrade}`);
console.log(`Lowest: ${lowestGrade}`);
```
**Voici comment fonctionne ce code :**
- **Initialise** des variables de suivi pour la somme et les extrêmes
- **Traite** chaque note avec une seule boucle efficace
- **Accumule** le total pour calculer la moyenne
- **Suit** les valeurs les plus hautes et les plus basses pendant litération
- **Calcule** les statistiques finales après la fin de la boucle
✅ Essayez de faire tourner une boucle sur un tableau que vous avez créé dans la console de votre navigateur.
```mermaid
flowchart TD
A["📦 Données de tableau"] --> B["🔄 Traitement en boucle"]
B --> C["📈 Résultats"]
A1["[85, 92, 78, 96, 88]"] --> A
B --> B1["Calculer le total"]
B --> B2["Trouver min/max"]
B --> B3["Compter les conditions"]
B --> B4["Transformer les données"]
C --> C1["Moyenne : 87,8"]
C --> C2["Le plus élevé : 96"]
C --> C3["Réussite : 5/5"]
C --> C4["Notes en lettres"]
D["⚡ Modèles de traitement"] --> D1["Accumulation (somme)"]
D --> D2["Comparaison (min/max)"]
D --> D3["Filtrage (conditions)"]
D --> D4["Cartographie (transformation)"]
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e8
style D fill:#f3e5f5
```
---
## Défi GitHub Copilot Agent 🚀
Utilisez le mode Agent pour relever le défi suivant :
**Description :** Construisez une fonction complète de traitement de données qui combine tableaux et boucles pour analyser un ensemble de données et générer des informations significatives.
**Consigne :** Créez une fonction appelée `analyzeGrades` qui prend un tableau dobjets de notes détudiants (chacun contenant les propriétés name et score) et renvoie un objet avec des statistiques incluant le score le plus élevé, le score le plus bas, la moyenne, le nombre détudiants ayant réussi (score >= 70), et un tableau des noms détudiants ayant un score supérieur à la moyenne. Utilisez au moins deux types de boucles différents dans votre solution.
Apprenez-en plus sur le [mode agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) ici.
## 🚀 Défi
JavaScript offre plusieurs méthodes modernes de tableau qui peuvent remplacer les boucles traditionnelles pour des tâches spécifiques. Explorez [forEach](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach), [for-of](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/for...of), [map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map), [filter](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) et [reduce](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce).
**Votre défi :** Refactorez l'exemple des notes des étudiants en utilisant au moins trois méthodes de tableau différentes. Remarquez à quel point le code devient plus clair et plus lisible avec la syntaxe moderne de JavaScript.
## Quiz post-cours
[Quiz post-cours](https://ff-quizzes.netlify.app/web/quiz/14)
## Revue & Auto-étude
Les tableaux en JavaScript possèdent de nombreuses méthodes qui leur sont associées et qui sont extrêmement utiles pour la manipulation des données. [Informez-vous sur ces méthodes](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) et essayez-en certaines (comme push, pop, slice et splice) sur un tableau que vous aurez créé.
## Devoir
[Parcourir un tableau](assignment.md)
---
## 📊 **Résumé de votre boîte à outils Tableaux & Boucles**
```mermaid
graph TD
A["🎯 Maîtrise des Tableaux & Boucles"] --> B["📦 Notions Fondamentales des Tableaux"]
A --> C["🔄 Types de Boucles"]
A --> D["🔗 Traitement des Données"]
A --> E["🎨 Techniques Modernes"]
B --> B1["Création : [ ]"]
B --> B2["Indexation : arr[0]"]
B --> B3["Méthodes : push, pop"]
B --> B4["Propriétés : longueur"]
C --> C1["For : Itérations Connues"]
C --> C2["While : Basé sur Condition"]
C --> C3["For...of : Accès Direct"]
C --> C4["forEach : Fonctionnel"]
D --> D1["Calcul de statistiques"]
D --> D2["Transformation des données"]
D --> D3["Filtrage & recherche"]
D --> D4["Traitement en temps réel"]
E --> E1["Fonctions fléchées"]
E --> E2["Chaine de méthodes"]
E --> E3["Destructuration"]
E --> E4["Littéraux de gabarits"]
F["💡 Avantages Clés"] --> F1["Gestion efficace des données"]
F --> F2["Réduction de la répétition de code"]
F --> F3["Solutions évolutives"]
F --> F4["Syntaxe plus propre"]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
style F fill:#fce4ec
```
---
## 🚀 Votre calendrier de maîtrise des Tableaux & Boucles
### ⚡ **Ce que vous pouvez faire dans les 5 prochaines minutes**
- [ ] Créer un tableau de vos films préférés et accéder à des éléments spécifiques
- [ ] Écrire une boucle for qui compte de 1 à 10
- [ ] Essayer le défi des méthodes modernes de tableau proposé dans la leçon
- [ ] S'exercer à l'indexation des tableaux dans la console de votre navigateur
### 🎯 **Ce que vous pouvez accomplir cette heure**
- [ ] Terminer le quiz post-cours et réviser les concepts difficiles
- [ ] Construire l'analyseur complet de notes issu du défi GitHub Copilot
- [ ] Créer un panier d'achat simple qui ajoute et supprime des articles
- [ ] S'exercer à convertir différents types de boucles
- [ ] Expérimenter avec des méthodes de tableau comme `push`, `pop`, `slice` et `splice`
### 📅 **Votre parcours de traitement des données sur une semaine**
- [ ] Terminer le devoir "Parcourir un tableau" avec des améliorations créatives
- [ ] Créer une application de liste de tâches utilisant des tableaux et des boucles
- [ ] Créer un calculateur de statistiques simple pour des données numériques
- [ ] S'exercer avec les [méthodes de tableau MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)
- [ ] Construire une galerie photo ou une interface de playlist musicale
- [ ] Explorer la programmation fonctionnelle avec `map`, `filter` et `reduce`
### 🌟 **Votre transformation sur un mois**
- [ ] Maîtriser les opérations avancées sur les tableaux et l'optimisation des performances
- [ ] Construire un tableau de bord complet de visualisation de données
- [ ] Contribuer à des projets open source impliquant le traitement des données
- [ ] Enseigner à d'autres les tableaux et boucles avec des exemples pratiques
- [ ] Créer une bibliothèque personnelle de fonctions réutilisables pour le traitement des données
- [ ] Explorer des algorithmes et structures de données basés sur les tableaux
### 🏆 **Bilan final du champion du traitement des données**
**Célébrez votre maîtrise des tableaux et boucles :**
- Quelle est l'opération sur tableaux la plus utile que vous ayez apprise pour des applications réelles ?
- Quel type de boucle vous semble le plus naturel et pourquoi ?
- Comment la compréhension des tableaux et boucles a-t-elle changé votre approche de l'organisation des données ?
- Quelle tâche complexe de traitement des données souhaitez-vous aborder ensuite ?
```mermaid
journey
title Votre évolution dans le traitement des données
section Aujourd'hui
Array Confusion: 3: You
Loop Basics: 4: You
Index Understanding: 5: You
section Cette semaine
Method Mastery: 4: You
Efficient Processing: 5: You
Modern Syntax: 5: You
section Le mois prochain
Complex Algorithms: 5: You
Performance Optimization: 5: You
Teaching Others: 5: You
```
> 📦 **Vous avez débloqué la puissance de l'organisation et du traitement des données !** Les tableaux et les boucles sont la base de presque toutes les applications que vous créerez un jour. Des listes simples aux analyses de données complexes, vous avez désormais les outils pour gérer l'information de manière efficace et élégante. Chaque site web dynamique, application mobile et application basée sur les données s'appuie sur ces concepts fondamentaux. Bienvenue dans le monde du traitement des données évolutif ! 🎉
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Avertissement** :
Ce document a été traduit à laide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforçons dassurer lexactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue dorigine doit être considéré comme la source officielle. Pour les informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de lutilisation de cette traduction.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->