Énoncés des TPs - Structures de Données et Méthodes Modernes (Corrigés et Détaillés)
TP 1 : map() - Transformer les données
La méthode map() crée un nouveau tableau en appliquant une fonction à chaque élément.
Syntaxe : tableau.map((element, index, array) => { ... })
Exercice 1.1 : Transformations numériques
Énoncé : Créez un tableau nombres = [1, 2, 3, 4, 5] et utilisez map() pour doubler, élever au carré et convertir en euros.
Correction complète :
const nombres = [1, 2, 3, 4, 5];
// 1. Doubler chaque nombre
const doubles = nombres.map((n) => n * 2);
console.log(doubles); // [2, 4, 6, 8, 10]
// 2. Élever au carré
const carres = nombres.map((n) => n ** 2);
console.log(carres); // [1, 4, 9, 16, 25]
// 3. Convertir en chaîne avec symbole "€"
const avecEuros = nombres.map((n) => `${n}€`);
console.log(avecEuros); // ["1€", "2€", "3€", "4€", "5€"]
Détails :
n * 2: multiplication simplen ** 2: opérateur d’exponentiation (équivalent àMath.pow(n, 2))- Template literals (backticks) : permet d’insérer des variables dans une chaîne
Exercice 1.2 : Transformation d’objets (utilisateurs)
Énoncé : Travaillez avec un tableau d’objets utilisateurs.
Correction complète :
const utilisateurs = [
{ nom: 'Alice', age: 25 },
{ nom: 'Bob', age: 30 },
];
// 1. Extraire seulement les noms
const noms = utilisateurs.map((u) => u.nom);
console.log(noms); // ["Alice", "Bob"]
// 2. Créer des phrases descriptives
const phrases = utilisateurs.map((u) => `${u.nom} a ${u.age} ans`);
console.log(phrases);
// ["Alice a 25 ans", "Bob a 30 ans"]
// 3. Ajouter une propriété 'adulte' (age >= 18)
const utilisateursAvecAdulte = utilisateurs.map((u) => ({
...u,
adulte: u.age >= 18,
}));
console.log(utilisateursAvecAdulte);
// [
// { nom: 'Alice', age: 25, adulte: true },
// { nom: 'Bob', age: 30, adulte: true }
// ]
Détails importants :
- Spread operator (
...u) : copie toutes les propriétés de l’objet - Les parenthèses autour de
({...})sont obligatoires pour retourner un objet en arrow function - Sans parenthèses, les accolades sont interprétées comme le corps de la fonction
✅ Oui, c’est la meilleure approche !
// Ajouter une propriété 'adulte' (age >= 18)
const utilisateursAvecAdulte = utilisateurs.map((user) => ({
...user,
adulte: user.age >= 18,
}));
console.log(utilisateursAvecAdulte);
Pourquoi c’est excellent :
1️⃣ Concis et lisible
- Une seule ligne de logique
- Facile à comprendre immédiatement
2️⃣ Approche fonctionnelle
map(): transforme chaque élément- Retourne un nouveau tableau
- Ne modifie pas l’original
3️⃣ Spread operator ...user
- Copie toutes les propriétés existantes
- Ajoute la nouvelle propriété
adulte - Crée un nouvel objet (immutable)
4️⃣ Immutabilité
console.log(utilisateurs); // Inchangé ✅
console.log(utilisateursAvecAdulte); // Nouveau tableau ✅
Exemple complet :
const utilisateurs = [
{ nom: 'Alice', age: 25 },
{ nom: 'Bob', age: 17 },
{ nom: 'Charlie', age: 35 },
];
// ✅ MEILLEURE APPROCHE
const utilisateursAvecAdulte = utilisateurs.map((user) => ({
...user,
adulte: user.age >= 18,
}));
console.log(utilisateursAvecAdulte);
// [
// { nom: 'Alice', age: 25, adulte: true },
// { nom: 'Bob', age: 17, adulte: false },
// { nom: 'Charlie', age: 35, adulte: true }
// ]
Cas d’usage similaires :
// Ajouter plusieurs propriétés
const utilisateursComplets = utilisateurs.map((user) => ({
...user,
adulte: user.age >= 18,
categorie: user.age < 13 ? 'enfant' : user.age < 18 ? 'ado' : 'adulte',
id: Math.random(),
}));
// Modifier et ajouter
const utilisateursMaj = utilisateurs.map((user) => ({
...user,
nom: user.nom.toUpperCase(),
adulte: user.age >= 18,
}));
// Ajouter conditionnellement
const utilisateursFiltrés = utilisateurs.map((user) => ({
...user,
adulte: user.age >= 18,
...(user.age >= 18 && { statut: 'majeur' }),
}));
⭐ Résumé
C’est la meilleure pratique en JavaScript moderne car :
- ✅ Fonctionnel et déclaratif
- ✅ Immutable (ne modifie pas l’original)
- ✅ Concis et lisible
- ✅ Performant
- ✅ Facile à chaîner avec d’autres méthodes
Continuez avec cette approche ! 🚀
Exercice 1.3 : Conversion de devises
Énoncé : Convertissez des prix en dollars en euros (multiplier par 0.92) et ajouter le symbole “€”.
Correction complète :
const prixEnDollars = [10, 25, 50, 100, 200];
// Conversion dollars → euros avec symbole
const prixEnEuros = prixEnDollars.map((prix) => {
const enEuros = prix * 0.92;
return `${enEuros.toFixed(2)}€`;
});
console.log(prixEnEuros);
// ["9.20€", "23.00€", "46.00€", "92.00€", "184.00€"]
// Version compacte (une ligne)
const prixEnEurosCompact = prixEnDollars.map((p) => `${(p * 0.92).toFixed(2)}€`);
console.log(prixEnEurosCompact);
Détails :
.toFixed(2): arrondit à 2 décimales et retourne une chaîne- Utile pour les opérations monétaires
TP 2 : filter() - Sélectionner les données
La méthode filter() crée un nouveau tableau contenant seulement les éléments qui satisfont une condition.
Syntaxe : tableau.filter((element, index, array) => condition)
Important : La fonction doit retourner true ou false
Exercice 2.1 : Filtrage numérique
Énoncé : Avec nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], filtrez selon différents critères.
Correction complète :
const nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 1. Garder seulement les nombres pairs
const pairs = nombres.filter((n) => n % 2 === 0);
console.log(pairs); // [2, 4, 6, 8, 10]
// 2. Garder seulement les nombres > 5
const superieursCinq = nombres.filter((n) => n > 5);
console.log(superieursCinq); // [6, 7, 8, 9, 10]
// 3. Garder seulement les nombres entre 3 et 7 (inclus)
const entre3et7 = nombres.filter((n) => n >= 3 && n <= 7);
console.log(entre3et7); // [3, 4, 5, 6, 7]
Détails :
n % 2 === 0: modulo 2 égal 0 = nombre pair&&: opérateur ET logique (les deux conditions doivent être vraies)
Exercice 2.2 : Filtrage d’objets (utilisateurs)
Énoncé : Filtrez un tableau d’utilisateurs selon différents critères.
Correction complète :
const utilisateurs = [
{ nom: 'Alice', age: 25, ville: 'Paris' },
{ nom: 'Bob', age: 17, ville: 'Lyon' },
{ nom: 'Charlie', age: 35, ville: 'Paris' },
];
// 1. Garder seulement les majeurs (age >= 18)
const majeurs = utilisateurs.filter((u) => u.age >= 18);
console.log(majeurs);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
// 2. Garder seulement les habitants de Paris
const parisiens = utilisateurs.filter((u) => u.ville === 'Paris');
console.log(parisiens);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
// 3. Garder les majeurs de Paris (condition composée)
const majeursDeParis = utilisateurs.filter((u) => u.age >= 18 && u.ville === 'Paris');
console.log(majeursDeParis);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
Détails :
u.ville === 'Paris': comparaison de chaînes (stricte avec===)- Combinaison de conditions avec
&&(ET) ou||(OU)
Exercice 2.3 : Filtrage de produits
Énoncé : Filtrez un tableau de produits selon le stock et le prix.
Correction complète :
const produits = [
{ nom: 'Laptop', prix: 1200, stock: 5 },
{ nom: 'Souris', prix: 25, stock: 0 },
{ nom: 'Clavier', prix: 85, stock: 12 },
{ nom: 'Écran', prix: 350, stock: 3 },
{ nom: 'Câble USB', prix: 8, stock: 50 },
];
// 1. Produits en stock (stock > 0)
const enStock = produits.filter((p) => p.stock > 0);
console.log(enStock);
// Retourne tous sauf "Souris"
// 2. Produits moins chers que 100€
const moinsCher100 = produits.filter((p) => p.prix < 100);
console.log(moinsCher100);
// [
// { nom: 'Souris', prix: 25, stock: 0 },
// { nom: 'Clavier', prix: 85, stock: 12 },
// { nom: 'Câble USB', prix: 8, stock: 50 }
// ]
// 3. Produits chers (>= 100€) ET en stock
const chersEnStock = produits.filter((p) => p.prix >= 100 && p.stock > 0);
console.log(chersEnStock);
// [
// { nom: 'Laptop', prix: 1200, stock: 5 },
// { nom: 'Écran', prix: 350, stock: 3 }
// ]
Détails :
- Combinaison de deux conditions :
prix >= 100 && stock > 0 - Utile pour les filtres de boutique en ligne
Résumé des différences map() vs filter()
| Aspect | map() |
filter() |
|---|---|---|
| Objectif | Transformer chaque élément | Sélectionner certains éléments |
| Retour | Tableau de même taille | Tableau plus petit ou égal |
| Fonction | Retourne la valeur transformée | Retourne true ou false |
| Exemple | [1,2,3].map(n => n*2) → [2,4,6] |
[1,2,3].filter(n => n>1) → [2,3] |
Conseils pratiques
✅ À faire :
- Utiliser
map()pour transformer des données - Utiliser
filter()pour nettoyer/sélectionner des données - Combiner les deux :
array.filter(...).map(...) - Tester avec
console.log()à chaque étape
❌ À éviter :
- Modifier le tableau original (ces méthodes retournent un nouveau tableau)
- Oublier les parenthèses autour des objets retournés par
map() - Utiliser
filter()pour transformer (utilisermap()à la place)
TP 2, 3 et 4 - Corrigés et Détaillés
TP 2 : filter() - Sélectionner les données (Complet)
La méthode filter() crée un nouveau tableau contenant seulement les éléments qui satisfont une condition.
Syntaxe : tableau.filter((element, index, array) => condition)
Exercice 2.1 : Filtrage numérique
Énoncé : Avec nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], filtrez selon différents critères.
Correction complète :
const nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 1. Garder seulement les nombres pairs
const pairs = nombres.filter((n) => n % 2 === 0);
console.log(pairs); // [2, 4, 6, 8, 10]
// 2. Garder seulement les nombres > 5
const superieursCinq = nombres.filter((n) => n > 5);
console.log(superieursCinq); // [6, 7, 8, 9, 10]
// 3. Garder seulement les nombres entre 3 et 7 (inclus)
const entre3et7 = nombres.filter((n) => n >= 3 && n <= 7);
console.log(entre3et7); // [3, 4, 5, 6, 7]
Détails pédagogiques :
n % 2 === 0: l’opérateur modulo%retourne le reste de la division. Si le reste est 0, le nombre est pair&&: opérateur ET logique (les deux conditions doivent être vraies)||: opérateur OU logique (au moins une condition doit être vraie)
Exercice 2.2 : Filtrage d’objets (utilisateurs)
Énoncé : Filtrez un tableau d’utilisateurs selon différents critères.
Correction complète :
const utilisateurs = [
{ nom: 'Alice', age: 25, ville: 'Paris' },
{ nom: 'Bob', age: 17, ville: 'Lyon' },
{ nom: 'Charlie', age: 35, ville: 'Paris' },
];
// 1. Garder seulement les majeurs (age >= 18)
const majeurs = utilisateurs.filter((u) => u.age >= 18);
console.log(majeurs);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
// 2. Garder seulement les habitants de Paris
const parisiens = utilisateurs.filter((u) => u.ville === 'Paris');
console.log(parisiens);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
// 3. Garder les majeurs de Paris (condition composée)
const majeursDeParis = utilisateurs.filter((u) => u.age >= 18 && u.ville === 'Paris');
console.log(majeursDeParis);
// [
// { nom: 'Alice', age: 25, ville: 'Paris' },
// { nom: 'Charlie', age: 35, ville: 'Paris' }
// ]
Détails pédagogiques :
u.ville === 'Paris': comparaison stricte avec===(type et valeur)- Accès aux propriétés d’objets :
u.age,u.ville - Combinaison de conditions pour des filtres complexes
Exercice 2.3 : Filtrage de produits
Énoncé : Filtrez un tableau de produits selon le stock et le prix.
Correction complète :
const produits = [
{ nom: 'Laptop', prix: 1200, stock: 5 },
{ nom: 'Souris', prix: 25, stock: 0 },
{ nom: 'Clavier', prix: 85, stock: 12 },
{ nom: 'Écran', prix: 350, stock: 3 },
{ nom: 'Câble USB', prix: 8, stock: 50 },
];
// 1. Produits en stock (stock > 0)
const enStock = produits.filter((p) => p.stock > 0);
console.log(enStock);
// [
// { nom: 'Laptop', prix: 1200, stock: 5 },
// { nom: 'Clavier', prix: 85, stock: 12 },
// { nom: 'Écran', prix: 350, stock: 3 },
// { nom: 'Câble USB', prix: 8, stock: 50 }
// ]
// 2. Produits moins chers que 100€
const moinsCher100 = produits.filter((p) => p.prix < 100);
console.log(moinsCher100);
// [
// { nom: 'Souris', prix: 25, stock: 0 },
// { nom: 'Clavier', prix: 85, stock: 12 },
// { nom: 'Câble USB', prix: 8, stock: 50 }
// ]
// 3. Produits chers (>= 100€) ET en stock
const chersEnStock = produits.filter((p) => p.prix >= 100 && p.stock > 0);
console.log(chersEnStock);
// [
// { nom: 'Laptop', prix: 1200, stock: 5 },
// { nom: 'Écran', prix: 350, stock: 3 }
// ]
Détails pédagogiques :
- Combinaison de deux conditions numériques
- Cas d’usage réel : filtres de boutique en ligne
- Peut être chaîné avec d’autres méthodes :
produits.filter(...).map(...)
TP 3 : reduce() - Agréger les données
La méthode reduce() combine tous les éléments d’un tableau en une seule valeur.
Syntaxe : tableau.reduce((accumulateur, element, index, array) => { ... }, valeurInitiale)
Paramètres :
accumulateur: accumule le résultat au fil des itérationselement: élément courantvaleurInitiale: valeur de départ (optionnelle mais recommandée)
Exercice 3.1 : Opérations numériques avec reduce()
Énoncé : Avec nombres = [1, 2, 3, 4, 5], utilisez reduce() pour calculer la somme, le produit et le maximum.
Correction complète :
const nombres = [1, 2, 3, 4, 5];
// 1. Calculer la somme de tous les nombres
const somme = nombres.reduce((acc, n) => acc + n, 0);
console.log(somme); // 15
// Détail du processus :
// Itération 1 : acc = 0, n = 1 → 0 + 1 = 1
// Itération 2 : acc = 1, n = 2 → 1 + 2 = 3
// Itération 3 : acc = 3, n = 3 → 3 + 3 = 6
// Itération 4 : acc = 6, n = 4 → 6 + 4 = 10
// Itération 5 : acc = 10, n = 5 → 10 + 5 = 15
// 2. Calculer le produit de tous les nombres
const produit = nombres.reduce((acc, n) => acc * n, 1);
console.log(produit); // 120 (1 × 2 × 3 × 4 × 5)
// 3. Trouver le nombre maximum
const maximum = nombres.reduce((acc, n) => (n > acc ? n : acc), nombres[0]);
console.log(maximum); // 5
// Alternative plus lisible :
const max = nombres.reduce((acc, n) => Math.max(acc, n), -Infinity);
console.log(max); // 5
Détails pédagogiques :
- Somme : valeur initiale = 0 (élément neutre pour l’addition)
- Produit : valeur initiale = 1 (élément neutre pour la multiplication)
- Maximum : comparaison avec l’accumulateur à chaque itération
Math.max(): fonction intégrée pour trouver le maximum entre deux nombres
Exercice 3.2 : Compter les occurrences avec reduce()
Énoncé : Avec fruits = ['pomme', 'banane', 'pomme', 'orange', 'banane', 'pomme'], comptez les occurrences.
Correction complète :
const fruits = ['pomme', 'banane', 'pomme', 'orange', 'banane', 'pomme'];
// Créer un objet avec le compte de chaque fruit
const comptage = fruits.reduce((acc, fruit) => {
// Si le fruit existe déjà, incrémenter le compte
// Sinon, initialiser à 1
acc[fruit] = (acc[fruit] || 0) + 1;
return acc;
}, {});
console.log(comptage);
// { pomme: 3, banane: 2, orange: 1 }
// Explication du processus :
// Itération 1 : acc = {}, fruit = 'pomme' → acc['pomme'] = 1
// Itération 2 : acc = {pomme: 1}, fruit = 'banane' → acc['banane'] = 1
// Itération 3 : acc = {pomme: 1, banane: 1}, fruit = 'pomme' → acc['pomme'] = 2
// Itération 4 : acc = {pomme: 2, banane: 1}, fruit = 'orange' → acc['orange'] = 1
// Itération 5 : acc = {pomme: 2, banane: 1, orange: 1}, fruit = 'banane' → acc['banane'] = 2
// Itération 6 : acc = {pomme: 2, banane: 2, orange: 1}, fruit = 'pomme' → acc['pomme'] = 3
Détails pédagogiques :
acc[fruit] || 0: si la clé n’existe pas, utiliser 0 (opérateur OR logique)- Valeur initiale =
{}(objet vide) - Cas d’usage : analyse de données, statistiques
Exercice 3.3 : Grouper par ville avec reduce()
Énoncé : Avec un tableau d’utilisateurs, groupez-les par ville.
Correction complète :
const utilisateurs = [
{ nom: 'Alice', ville: 'Paris' },
{ nom: 'Bob', ville: 'Lyon' },
{ nom: 'Charlie', ville: 'Paris' },
{ nom: 'Diana', ville: 'Lyon' },
{ nom: 'Eve', ville: 'Marseille' },
];
// Grouper les utilisateurs par ville
const parVille = utilisateurs.reduce((acc, user) => {
const ville = user.ville;
// Si la ville n'existe pas dans l'accumulateur, créer un tableau vide
if (!acc[ville]) {
acc[ville] = [];
}
// Ajouter l'utilisateur au tableau de sa ville
acc[ville].push(user);
return acc;
}, {});
console.log(parVille);
// {
// Paris: [
// { nom: 'Alice', ville: 'Paris' },
// { nom: 'Charlie', ville: 'Paris' }
// ],
// Lyon: [
// { nom: 'Bob', ville: 'Lyon' },
// { nom: 'Diana', ville: 'Lyon' }
// ],
// Marseille: [
// { nom: 'Eve', ville: 'Marseille' }
// ]
// }
// Version compacte avec l'opérateur OR :
const parVilleCompact = utilisateurs.reduce((acc, user) => {
acc[user.ville] = acc[user.ville] || [];
acc[user.ville].push(user);
return acc;
}, {});
Détails pédagogiques :
- Vérification d’existence :
if (!acc[ville]) - Création de tableaux imbriqués
- Cas d’usage : organisation de données par catégorie
Exercice 3.4 : Calculer le total d’une commande
Énoncé : Avec un tableau d’articles de commande, calculez le total : (prix × quantité) pour chaque article.
Correction complète :
const articles = [
{ nom: 'Laptop', prix: 1200, quantite: 1 },
{ nom: 'Souris', prix: 25, quantite: 3 },
{ nom: 'Clavier', prix: 85, quantite: 2 },
];
// Calculer le total de la commande
const totalCommande = articles.reduce((acc, article) => {
const sousTotal = article.prix * article.quantite;
return acc + sousTotal;
}, 0);
console.log(totalCommande); // 1200 + 75 + 170 = 1445
// Version détaillée avec affichage des calculs :
const totalAvecDetails = articles.reduce((acc, article) => {
const sousTotal = article.prix * article.quantite;
console.log(`${article.nom}: ${article.prix}€ × ${article.quantite} = ${sousTotal}€`);
return acc + sousTotal;
}, 0);
console.log(`Total: ${totalAvecDetails}€`);
// Créer un objet avec les détails de chaque article :
const commandeDetaillée = articles.reduce(
(acc, article) => {
return {
...acc,
articles: [
...acc.articles,
{
nom: article.nom,
sousTotal: article.prix * article.quantite,
},
],
total: acc.total + article.prix * article.quantite,
};
},
{ articles: [], total: 0 },
);
console.log(commandeDetaillée);
// {
// articles: [
// { nom: 'Laptop', sousTotal: 1200 },
// { nom: 'Souris', sousTotal: 75 },
// { nom: 'Clavier', sousTotal: 170 }
// ],
// total: 1445
// }
Détails pédagogiques :
- Multiplication de deux propriétés :
prix × quantite - Accumulation progressive du total
- Spread operator pour créer des objets complexes
TP 4 : find/some/every - Rechercher et vérifier les données
Ces méthodes permettent de chercher et vérifier les éléments d’un tableau.
| Méthode | Retour | Utilité |
|---|---|---|
find() |
Premier élément trouvé | Chercher UN élément |
findIndex() |
Index du premier élément trouvé | Chercher la POSITION d’un élément |
some() |
true ou false |
Vérifier si AU MOINS UN élément satisfait la condition |
every() |
true ou false |
Vérifier si TOUS les éléments satisfont la condition |
Exercice 4.1 : Chercher avec find() et findIndex()
Énoncé : Avec un tableau d’utilisateurs, utilisez find() et findIndex().
Correction complète :
const utilisateurs = [
{ id: 1, nom: 'Alice' },
{ id: 2, nom: 'Bob' },
{ id: 3, nom: 'Charlie' },
];
// 1. Trouver l'utilisateur avec le nom 'Bob'
const bob = utilisateurs.find((u) => u.nom === 'Bob');
console.log(bob); // { id: 2, nom: 'Bob' }
// 2. Trouver l'index de 'Bob'
const indexBob = utilisateurs.findIndex((u) => u.nom === 'Bob');
console.log(indexBob); // 1 (deuxième élément, index commence à 0)
// 3. Trouver le premier utilisateur avec id > 1
const premierIdSup1 = utilisateurs.find((u) => u.id > 1);
console.log(premierIdSup1); // { id: 2, nom: 'Bob' }
// Cas où rien n'est trouvé :
const inexistant = utilisateurs.find((u) => u.nom === 'Zorro');
console.log(inexistant); // undefined
// Vérifier si l'élément existe :
if (bob) {
console.log(`Utilisateur trouvé: ${bob.nom}`);
} else {
console.log('Utilisateur non trouvé');
}
Détails pédagogiques :
find()retourne le premier élément qui satisfait la conditionfind()retourneundefinedsi rien n’est trouvéfindIndex()retourne l’index (position) du premier élément trouvéfindIndex()retourne-1si rien n’est trouvé
Exercice 4.2 : Vérifier avec some() et every()
Énoncé : Avec notes = [12, 15, 18, 14, 16], vérifiez différentes conditions.
Correction complète :
const notes = [12, 15, 18, 14, 16];
// 1. Vérifier si au moins une note est >= 18
const auMoinsUne18 = notes.some((n) => n >= 18);
console.log(auMoinsUne18); // true (18 existe)
// 2. Vérifier si toutes les notes sont >= 10
const toutesSupOuEgal10 = notes.every((n) => n >= 10);
console.log(toutesSupOuEgal10); // true (toutes >= 10)
// 3. Vérifier si toutes les notes sont >= 15
const toutesSupOuEgal15 = notes.every((n) => n >= 15);
console.log(toutesSupOuEgal15); // false (12 et 14 < 15)
// Exemples supplémentaires :
// Vérifier s'il existe au moins une note < 13
const auMoinsUneMauvaise = notes.some((n) => n < 13);
console.log(auMoinsUneMauvaise); // true (12 existe)
// Vérifier si toutes les notes sont < 20
const toutesInferieur20 = notes.every((n) => n < 20);
console.log(toutesInferieur20); // true
// Cas pratique : vérifier si un étudiant a réussi
const noteMinimale = 10;
const aReussi = notes.every((n) => n >= noteMinimale);
console.log(`L'étudiant a réussi: ${aReussi}`);
Détails pédagogiques :
some(): retournetruedès qu’une condition est satisfaite (court-circuit)every(): retournefalsedès qu’une condition n’est pas satisfaite (court-circuit)- Optimisation : les boucles s’arrêtent dès que le résultat est déterminé
Exercice 4.3 : Vérifier l’état des produits
Énoncé : Avec un tableau de produits, vérifiez l’existence et les conditions.
Correction complète :
const produits = [
{ nom: 'Laptop', prix: 1200, stock: 5 },
{ nom: 'Souris', prix: 25, stock: 0 },
{ nom: 'Clavier', prix: 85, stock: 12 },
{ nom: 'Écran', prix: 350, stock: 0 },
{ nom: 'Câble USB', prix: 8, stock: 50 },
];
// 1. S'il existe au moins un produit en stock
const existeEnStock = produits.some((p) => p.stock > 0);
console.log(`Au moins un produit en stock: ${existeEnStock}`); // true
// 2. Si tous les produits coûtent moins de 1000€
const tousUnderPrice = produits.every((p) => p.prix < 1000);
console.log(`Tous les produits < 1000€: ${tousUnderPrice}`); // false (Laptop = 1200€)
// Cas pratiques supplémentaires :
// Vérifier si tous les produits sont en stock
const tousEnStock = produits.every((p) => p.stock > 0);
console.log(`Tous les produits en stock: ${tousEnStock}`); // false
// Vérifier s'il existe au moins un produit cher (>= 300€)
const existeProduitCher = produits.some((p) => p.prix >= 300);
console.log(`Existe un produit >= 300€: ${existeProduitCher}`); // true
// Vérifier s'il existe au moins un produit sans stock
const existeSansStock = produits.some((p) => p.stock === 0);
console.log(`Existe un produit sans stock: ${existeSansStock}`); // true
// Afficher un message selon la disponibilité
if (produits.some((p) => p.stock > 0)) {
console.log('✅ La boutique a des articles en stock');
} else {
console.log('❌ Tous les articles sont en rupture de stock');
}
Détails pédagogiques :
some(): idéal pour vérifier l’existence d’au moins un élémentevery(): idéal pour vérifier que TOUS les éléments satisfont une condition- Cas d’usage réel : gestion de stock, validation de formulaires
Résumé comparatif : Toutes les méthodes
| Méthode | Retour | Modifie le tableau | Cas d’usage |
|---|---|---|---|
map() |
Nouveau tableau transformé | Non | Transformer chaque élément |
filter() |
Nouveau tableau filtré | Non | Sélectionner certains éléments |
reduce() |
Une seule valeur | Non | Agréger/combiner tous les éléments |
find() |
Premier élément trouvé | Non | Chercher UN élément |
findIndex() |
Index du premier élément | Non | Chercher la POSITION d’un élément |
some() |
true ou false |
Non | Vérifier si AU MOINS UN élément satisfait |
every() |
true ou false |
Non | Vérifier si TOUS les éléments satisfont |
Conseils pratiques
✅ À faire :
- Utiliser
map()pour transformer - Utiliser
filter()pour sélectionner - Utiliser
reduce()pour agréger - Utiliser
find()pour chercher un élément - Utiliser
some()/every()pour vérifier des conditions - Chaîner les méthodes :
array.filter(...).map(...).reduce(...) - Tester avec
console.log()à chaque étape
❌ À éviter :
- Modifier le tableau original (ces méthodes retournent de nouvelles valeurs)
- Utiliser
filter()pour chercher (utiliserfind()à la place) - Oublier la valeur initiale dans
reduce() - Confondre
some()etevery()
Chaînage de méthodes (Bonus)
const utilisateurs = [
{ nom: 'Alice', age: 25, ville: 'Paris' },
{ nom: 'Bob', age: 17, ville: 'Lyon' },
{ nom: 'Charlie', age: 35, ville: 'Paris' },
];
// Chaîner filter → map → reduce
const resultat = utilisateurs
.filter((u) => u.age >= 18) // Garder les majeurs
.map((u) => u.nom) // Extraire les noms
.reduce((acc, nom) => acc + nom + ', ', ''); // Combiner en chaîne
console.log(resultat); // "Alice, Charlie, "
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Énoncés des TPs - Structures de Données et Méthodes Modernes (Corrigés et Détaillés). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.