Aller au contenu
M05 · B. Acquérir les fondamentaux de JavaScript

Les tableaux : ajouter, chercher, trier, transformer

Créer un tableau, insérer, supprimer et modifier ses éléments, le parcourir, chercher et trier, et utiliser les méthodes modernes map, filter, find et reduce.

1Situer

Une boutique en ligne d'artisanat de Safi gère son catalogue : des dizaines de poteries avec leur nom, leur prix et leur stock. Il faut ajouter un produit, retirer ceux qui sont épuisés, trier par prix, chercher un article, calculer la valeur du stock. Tout cela se fait avec les méthodes des tableaux.

2Comprendre

filter, map, reduce : la chaîne de traitement
produits Tajine décoré · 180 DH · stock 4 Plat à couscous · 250 DH · stock 0 Plat à couscous · stock 0 ✖ Bol vernissé · 45 DH · stock 12 Vase bleu · 320 DH · stock 2 total du stock 45×12 + 180×4 + 320×2 1900 DH filter, map, sort, reduce : chaque étape reçoit le résultat de la précédente. produits.filter(…).sort(…).map(…)

Le tableau produits contient 4 poteries, chacune avec un prix et un stock.

1 / 5

Créer et lire

const villes = ['Safi', 'Fès', 'Agadir'];
villes[0]          // 'Safi'
villes.length      // 3
villes[villes.length - 1]  // dernier : 'Agadir'

Insérer, supprimer, modifier

MéthodeEffet
push(x) / pop()ajouter / retirer à la fin
unshift(x) / shift()ajouter / retirer au début
splice(i, n, ...)retirer n éléments à l’indice i, et en insérer
t[i] = xmodifier

Parcourir

for (const v of villes) console.log(v);
villes.forEach((v, i) => console.log(i, v));

Chercher et trier

MéthodeRenvoie
includes(x)true / false
indexOf(x)l’indice, ou -1
find(f)le premier élément qui vérifie f, ou undefined
findIndex(f)son indice, ou -1
sort((a, b) => a - b)trie sur place (croissant)
reverse()inverse l’ordre

Transformer

const dispo = produits.filter((p) => p.stock > 0);          // garder
const noms = produits.map((p) => p.nom);                     // transformer
const total = produits.reduce((s, p) => s + p.prix * p.stock, 0); // réduire à une valeur
noms.join(', ')                                              // en texte

filter, map et slice renvoient un nouveau tableau ; push, splice, sort modifient le tableau existant.

Exemple simple

Le train et ses wagons

Un tableau est un train : chaque wagon a un numéro (l'indice, qui commence à 0). push accroche un wagon à la fin, pop décroche le dernier, shift décroche le premier.

const train = ['tajine', 'plat', 'bol'];
train.push('vase');   // ['tajine', 'plat', 'bol', 'vase']
train[0];             // 'tajine'
train.length;         // 4
Exemple simple

Le tri des olives

Sur la chaîne de tri, filter garde seulement les bonnes olives, map les transforme (en huile !), reduce les additionne pour obtenir un total.

const prix = [120, 45, 300];
prix.filter((p) => p < 200);   // [120, 45]
prix.map((p) => p * 1.2);      // [144, 54, 360]
prix.reduce((s, p) => s + p, 0); // 465

3Manipuler

Le catalogue est un tableau d'objets. Utilisez les méthodes des tableaux pour répondre aux consignes : la liste de la page affiche le tableau produits.
Ouvrir dans le lab ↗
Console
  • Ajoutez l'assiette murale au catalogue
  • N'affichez plus le plat à couscous (stock 0) : utilisez filter
  • Triez par prix croissant : le bol vernissé doit être en premier
  • Avec find, affichez dans la console le prix du « Vase bleu » (320)
  • Avec reduce, affichez la valeur totale du stock (prix × stock) : 2440

4Pratiquer

Exercice 1 · Insérer et supprimer au milieu

Avec splice, (1) supprimez l'élément d'indice 1 de ['a', 'b', 'c', 'd'] ; (2) insérez 'x' à l'indice 2 sans rien supprimer.

Voir le corrigé
const t = ['a', 'b', 'c', 'd'];
t.splice(1, 1);        // t vaut ['a', 'c', 'd']
t.splice(2, 0, 'x');   // t vaut ['a', 'c', 'x', 'd']

Exercice 2 · Le piège du tri

Que donne [10, 9, 100].sort() ? Pourquoi ? Corrigez.

Voir le corrigé
[10, 9, 100].sort()                  // [10, 100, 9] : tri alphabétique des textes !
[10, 9, 100].sort((a, b) => a - b)   // [9, 10, 100] : tri numérique croissant

Exercice 3 · Les noms en majuscules

À partir de produits, construisez le tableau des noms en majuscules.

Voir le corrigé
const noms = produits.map((p) => p.nom.toUpperCase());

5Vérifier

1. Quel est l'indice du premier élément d'un tableau ?
2. Quelle méthode renvoie un nouveau tableau avec seulement les éléments qui respectent une condition ?
3. Que renvoie find si aucun élément ne correspond ?