Les Tableaux en JavaScript : Méthodes Essentielles

map, filter, reduce, forEach, find, sort — toutes les méthodes de tableau à maîtriser

10
Sections
30+
Exemples
ES6+
Standard

SECTION 01

Créer et manipuler un tableau

📦 Bases
// Créer un tableau
const fruits = [« pomme », « banane », « orange »];
const vide = [];
const nombres = Array.from(, (_, i) => i); // [0,1,2,3,4]

// Accéder
fruits[0]; // « pomme »
fruits[fruits.length 1]; // « orange » (dernier)
fruits.at(1); // « orange » (ES2022 — plus lisible)

// Ajouter / Supprimer
fruits.push(« kiwi »); // Ajoute à la fin → [« pomme », »banane », »orange », »kiwi »]
fruits.pop(); // Supprime le dernier → [« pomme », »banane », »orange »]
fruits.unshift(« fraise »); // Ajoute au début
fruits.shift(); // Supprime le premier

// Copier (spread)
const copie = […fruits];

// Vérifier
Array.isArray(fruits); // true
fruits.includes(« banane »); // true
fruits.length; // 3

SECTION 02

forEach — parcourir sans retour

forEach exécute une fonction sur chaque élément. Il ne retourne rien (undefined). Utilise-le pour des effets de bord (afficher, envoyer, modifier un état externe).

const noms = [« Alice », « Bob », « Charlie »];

noms.forEach((nom, index) => );
// 0: Alice
// 1: Bob
// 2: Charlie

⚠️ forEach ne peut pas être interrompu avec break ou return. Si tu as besoin d'arrêter la boucle en cours de route, utilise for…of ou find.

SECTION 03

map — transformer chaque élément

map crée un nouveau tableau en appliquant une fonction à chaque élément. Le tableau original n'est pas modifié.

const prix = [10, 20, 30];

// Doubler chaque prix
const doubles = prix.map(p => p * 2);
// [20, 40, 60]

// Formatter
const labels = prix.map(p => `$ €`);
// [« 10 € », « 20 € », « 30 € »]

// Extraire une propriété d'objets
const users = [
,
,
];
const noms = users.map(u => u.nom);
// [« Alice », « Bob »]

map retourne toujours un tableau de même longueur. Si tu veux filtrer en même temps, utilise filter avant ou après, ou flatMap.

SECTION 04

filter — garder certains éléments

filter crée un nouveau tableau contenant uniquement les éléments pour lesquels la fonction retourne true.

const nombres = [1, 2, 3, 4, 5, 6, 7, 8];

// Garder les pairs
const pairs = nombres.filter(n => n % 2 === 0);
// [2, 4, 6, 8]

// Filtrer des objets
const users = [
,
,
,
];
const majeurs = users.filter(u => u.age >= 18);
// [, ]

// Supprimer les doublons
const uniques = nombres.filter((val, i, arr) => arr.indexOf(val) === i);
// Alternative moderne : […new Set(nombres)]

SECTION 05

reduce — tout réduire à une valeur

reduce parcourt le tableau et accumule un résultat. C'est la méthode la plus puissante — elle peut remplacer map, filter et forEach.

// Syntaxe : array.reduce((accumulateur, élément) => …, valeurInitiale)

const prix = [10, 20, 30];

// Somme
const total = prix.reduce((acc, p) => acc + p, 0);
// 60

// Maximum
const max = prix.reduce((acc, p) => p > acc ? p : acc, 0);
// 30 (alternative : Math.max(…prix))

// Compter les occurrences
const fruits = [« pomme », « banane », « pomme », « orange », « banane », « pomme »];
const compteur = fruits.reduce((acc, fruit) => , );
//

// Grouper par propriété
const users = [
,
,
,
];
const parVille = users.reduce((acc, u) => , );
//
// Alternative ES2024 : Object.groupBy(users, u => u.ville)

⚠️ Fournis toujours la valeur initiale (le 2e argument de reduce). Sans elle, reduce utilise le premier élément comme accumulateur — ce qui cause des bugs avec des tableaux vides.

SECTION 06

find et findIndex

find retourne le premier élément qui satisfait la condition (ou undefined). findIndex retourne son index (ou -1).

const users = [
,
,
,
];

const bob = users.find(u => u.id === 2);
//

const index = users.findIndex(u => u.nom === « Charlie »);
// 2

// some — au moins un élément satisfait la condition ?
users.some(u => u.age > 18); // true

// every — TOUS satisfont la condition ?
users.every(u => u.nom); // true

SECTION 07

sort — trier un tableau

// ⚠️ sort() MODIFIE le tableau original et trie en STRING par défaut
const nombres = [10, 1, 21, 2];
nombres.sort();
// [1, 10, 2, 21] ← FAUX ! Tri alphabétique « 1 » < "10" < "2"

// Tri numérique correct
nombres.sort((a, b) => a b); // croissant [1, 2, 10, 21]
nombres.sort((a, b) => b a); // décroissant [21, 10, 2, 1]

// Tri d'objets par propriété
const users = [
,
,
,
];
users.sort((a, b) => a.age b.age); // par âge croissant
users.sort((a, b) => a.nom.localeCompare(b.nom)); // alphabétique

// toSorted() — ES2023, ne modifie PAS l'original
const triee = nombres.toSorted((a, b) => a b);

⚠️ sort() modifie le tableau original (mutation). Pour garder l'original intact, utilise toSorted() (ES2023) ou […arr].sort().

SECTION 08

Autres méthodes utiles

MéthodeRôleRetourneMute ?
map(fn)Transformer chaque élémentNouveau tableauNon
filter(fn)Garder les éléments qui passent le testNouveau tableauNon
reduce(fn, init)Accumuler une valeurValeur uniqueNon
forEach(fn)Exécuter sur chaque élémentundefinedNon
find(fn)Premier élément qui passe le testÉlément ou undefinedNon
findIndex(fn)Index du premier matchIndex ou -1Non
some(fn)Au moins un passe le test ?BooleanNon
every(fn)Tous passent le test ?BooleanNon
sort(fn)TrierMême tableau (muté)Oui
slice(start, end)Extraire une portionNouveau tableauNon
splice(i, n)Supprimer/insérer à une positionÉléments supprimésOui
flat(depth)Aplatir un tableau imbriquéNouveau tableauNon
flatMap(fn)map + flat(1)Nouveau tableauNon
includes(val)Contient la valeur ?BooleanNon
join(sep)Concaténer en stringStringNon

SECTION 09

Chaîner les méthodes

🔗 Le vrai pouvoir des méthodes de tableau

Comme map, filter et sort retournent des tableaux, tu peux les enchaîner :

const products = [
,
,
,
,
];

// Produits en stock, triés par prix, formatés
const resultat = products
.filter(p => p.stock > 0) // en stock seulement
.toSorted((a, b) => a.prix b.prix) // prix croissant
.map(p => `$ — $ €`); // formater

// [« Watch — 299 € », « Tablet — 449 € », « Laptop — 999 € »]

Le chaînage est la façon idiomatique de manipuler des données en JavaScript. C'est lisible, fonctionnel et sans mutation. Chaque étape produit un nouveau tableau.

SECTION 10

Questions fréquentes

Quelle différence entre map et forEach ?
map retourne un nouveau tableau transformé. forEach retourne undefined et sert uniquement aux effets de bord (console.log, requêtes). Si tu as besoin du résultat, utilise map. Si tu veux juste exécuter une action, utilise forEach.
Pourquoi sort() trie les nombres comme des strings ?
Par défaut, sort() convertit chaque élément en string et compare les valeurs Unicode. Donc « 10 » < « 2 » car « 1 » < « 2 ». Pour trier des nombres, passe toujours une fonction de comparaison : sort((a, b) => a – b).
Quand utiliser reduce vs map + filter ?
reduce fait tout en un seul parcours, ce qui peut être plus performant. Mais map/filter chaînés sont beaucoup plus lisibles. Préfère le chaînage pour la lisibilité. Utilise reduce pour les agrégations (somme, compteur, groupement) où map/filter ne suffisent pas.
Comment supprimer les doublons d'un tableau ?
La méthode la plus simple : […new Set(array)]. Pour des objets, utilise filter avec un Set sur la propriété unique : const seen = new Set(); arr.filter(x => !seen.has(x.id) && seen.add(x.id)).

Les tableaux en JavaScript — map, filter, reduce et toutes les méthodes essentielles

Référence : MDN Array