Vous disposez dĂ©sormais dâune page web gĂ©nĂ©rĂ©e automatiquement par votre code JavaScript, grĂące au DOM et Ă partir de donnĂ©es JSON que vous avez modifiĂ©es. Encore bravo ! đ„ł
Ceci dit, vous avez peut-ĂȘtre remarquĂ© que cette page est statique : vous ne pouvez pas interagir avec elle. De mĂȘme, votre page nâaffiche pour lâinstant quâun produit, alors que le fichier JSON en contient cinq. Pour rĂ©soudre ces problĂšmes, dĂ©couvrons ensemble les listes, et comment les manipuler. đ
Pour gĂ©nĂ©rer notre page web au chapitre prĂ©cĂ©dent, nous avons utilisĂ© les fonctions document.createElement et appendChild. Le code auquel nous avons abouti nous a permis de gĂ©nĂ©rer une fiche produit. Pour en gĂ©nĂ©rer plusieurs, nous allons devoir rĂ©pĂ©ter ce code. Une fois toutes ces fiches affichĂ©es Ă lâĂ©cran, nous voudrons les rĂ©ordonner selon leur prix, ou les trier pour ne garder que celles disponibles. Pour cela, nous utiliserons les listes et leurs mĂ©thodes de manipulation.
Peut-ĂȘtre connaissez-vous dĂ©jĂ lâĂ©lĂ©ment qui permet de rĂ©pĂ©ter du code en JavaScript : les boucles ! Si ce nâest pas le cas, nâhĂ©sitez pas Ă faire un tour sur ce chapitre du cours Apprenez Ă programmer avec JavaScript. Il existe trois boucles diffĂ©rentes :
la boucle while permet de rĂ©pĂ©ter des instructions tant quâune condition de test est vraie ;
la boucle do while permet d'exĂ©cuter au moins une fois une instruction avant de vĂ©rifier sâil faut la rĂ©pĂ©ter ;
la boucle for est utilisĂ©e lorsquâon sait Ă lâavance combien de fois on doit exĂ©cuter la boucle.
Dans notre cas, nous pouvons entourer notre code de gĂ©nĂ©ration avec une boucle for. Cela aura pour consĂ©quence de crĂ©er toutes les fiches produits de notre site, en un clin d'Ćil. Pratique, non ? đ
Pour utiliser la boucle for, nous allons donc écrire :
for (let i = 0; i < pieces.length; i++) {
// Récupération de l'élément du DOM qui accueillera les fiches
const sectionFiches = document.querySelector(".fiches");
// CrĂ©ation dâune balise dĂ©diĂ©e Ă une piĂšce automobile
const pieceElement = document.createElement("article");
// On crĂ©e lâĂ©lĂ©ment img.
const imageElement = document.createElement("img");
// On accĂšde Ă lâindice i de la liste pieces pour configurer la source de lâimage.
imageElement.src = pieces[i].image;
// Idem pour le nom, le prix et la catégorie...
// On rattache la balise article Ă la section Fiches
sectionFiches.appendChild(pieceElement);
// On rattache lâimage Ă pieceElement (la balise article)
pieceElement.appendChild(imageElement);
// Idem pour le nom, le prix et la catégorie...
}Pour obtenir le rĂ©sultat attendu, nous devons dâabord mettre Ă jour le fichier CSS. Rendez-vous sur le dĂ©pĂŽt GitHub pour rĂ©cupĂ©rer cette version actualisĂ©e du CSS.
Et voici ce que cela donne :

Toutes nos piĂšces sâaffichent sur lâĂ©cran ! đ„ł
Nous souhaitons maintenant ajouter des capacités de filtrage et de tri pour permettre aux utilisateurs de trouver plus rapidement les piÚces qui les intéressent. Regardons ensemble comment filtrer, réordonner et supprimer les piÚces grùce aux événements et à la manipulation des listes en JavaScript.
Dans ce cours, nous utilisons le terme de fonctions sort et filter par souci de vulgarisation. Mais en rĂ©alitĂ©, il sâagit plus prĂ©cisĂ©ment de mĂ©thodes de tableau. Câest ainsi que lâon nomme une fonction dĂ©finie Ă lâintĂ©rieur dâun objet. đ
Je vous propose de passer sur la branche P2C1-BoucleFor du dĂ©pĂŽt de code source. Vous verrez que jâai ajoutĂ© deux boutons sur notre page.
Ces derniers permettront Ă lâutilisateur dâinteragir avec le contenu pour le filtrer et lâordonner :
un bouton âTrier par prix croissantsâ ;
un bouton âFiltrer les piĂšces non abordablesâ.
Notre premiĂšre Ă©tape consiste donc Ă ajouter un listener au bouton âTrier par prix croissantsâ. Cela permettra de modifier lâordre des piĂšces en fonction de leur prix.
AprÚs notre boucle for, on écrit donc :
const boutonTrier = document.querySelector(".btn-trier");
boutonTrier.addEventListener("click", function () {
// ...
});Puis il nous faut rĂ©ordonner les Ă©lĂ©ments de la liste en fonction de leur prix. Pour cela, nous utilisons la fonction sort qui prend en argument⊠une nouvelle fonction. Nous dĂ©clarons celle-ci Ă lâintĂ©rieur des parenthĂšses de sort, sans lui donner de nom. On dit quâelle est anonyme. Cette fonction anonyme sera appelĂ©e par sort pour comparer deux Ă©lĂ©ments entre eux.
Lâextrait de code ci-dessous reprĂ©sente la dĂ©claration dâune fonction anonyme au moment de lâappel Ă la fonction sort :
pieces.sort(function (...) {
...
});Dans le cas de sort, la fonction anonyme prend deux paramĂštres quâil faudra comparer pour dire lequel doit ĂȘtre rangĂ© avant lâautre dans la liste rĂ©ordonnĂ©e finale. Traditionnellement, on nomme ces deux paramĂštres A et B.

Heuu⊠Tu nâaurais pas un exemple Ă nous donner ? đ
Bien sĂ»r ! Prenons lâexemple de lâampoule LED qui vaut 60 ⏠(Ă©lĂ©ment A), et du liquide de frein qui vaut 9,60 ⏠(Ă©lĂ©ment B). Nous souhaitons ranger le liquide de frein (B) avant lâampoule LED (A) car câest le moins cher des deux. La fonction anonyme devra donc retourner une valeur nĂ©gative. En soustrayant les prix des deux piĂšces avec le calcul B - A, on obtient 9,60 - 60 = -50,40. La fonction sort comprendra donc quâil faut ranger le liquide de frein avant lâampoule LED.
Voici le code complet qui permet de réordonner les éléments de la liste pieces lors du clic sur le bouton Trier :
const boutonTrier = document.querySelector(".btn-trier");
boutonTrier.addEventListener("click", function () {
pieces.sort(function (a, b) {
return a.prix - b.prix;
});
console.log(pieces);
});Quand jâĂ©cris ton code, les fiches produits restent dans le mĂȘme ordre. Pourquoi lâĂ©cran ne change pas ?
La fonction sort modifie la liste quâelle rĂ©ordonne âen placeâ (in-place, en anglais). Cela veut dire que les Ă©lĂ©ments de la liste changent de place. Cela pose un problĂšme car la liste dâorigine avec lâordre dâorigine est aussi modifiĂ©e. Pour rĂ©soudre ce problĂšme, nous pouvons crĂ©er une copie de la liste avec la fonction Array.from. Nous Ă©crirons donc :
// Gestion des boutons
const boutonTrier = document.querySelector(".btn-trier");
boutonTrier.addEventListener("click", function () {
const piecesOrdonnees = Array.from(pieces);
piecesOrdonnees.sort(function (a, b) {
return a.prix - b.prix;
});
console.log(piecesOrdonnees);
});Maintenant que nous avons gĂ©rĂ© le tri des piĂšces, ajoutons un listener sur le bouton âFiltrer les piĂšces non abordablesâ pour nâafficher que les piĂšces dont le prix est infĂ©rieur ou Ă©gal Ă 35 âŹ.
On écrira donc :
const boutonFiltrer = document.querySelector(".btn-filtrer");
boutonFiltrer.addEventListener("click", function () {
// ...
});La fonction anonyme doit retourner une valeur booléenne :
true si lâĂ©lĂ©ment doit se trouver dans la liste filtrĂ©e ;
false si lâĂ©lĂ©ment ne doit pas se trouver dans la liste filtrĂ©e.
Dans notre exemple, le fichier JSON contient lâinformation du prix du produit. Le code pour filtrer les piĂšces indisponibles sâĂ©crit donc :
const boutonFiltrer = document.querySelector(".btn-filtrer");
boutonFiltrer.addEventListener("click", function () {
const piecesFiltrees = pieces.filter(function (piece) {
return piece.prix <= 35;
});
 ;Lorsque ce code sâexĂ©cute, la constante piecesFiltrees contient une nouvelle liste avec uniquement les piĂšces disponibles, Ă savoir : lâampoule LED, les plaquettes de frein et le liquide de frein.
Vous pouvez revoir les différentes étapes de ce chapitre dans la vidéo ci-dessous :
Depuis la branche P2C1-Exercice, éditez les fichiers pieces.js et index.html pour y ajouter les fonctionnalités suivantes :
filtrer la liste des piĂšces pour nâafficher que celles qui ont une description, Ă lâaide dâun bouton que vous ajouterez dans le HTMLÂ ;
ordonner les listes selon le prix en ordre dĂ©croissant, Ă lâaide dâun bouton que vous ajouterez dans le HTML.
Vous pouvez vérifier votre travail en consultant la branche P2C1-Solution et en regardant la vidéo ci-dessous :
Pour parcourir vos donnĂ©es afin de gĂ©nĂ©rer autant dâĂ©lĂ©ments du DOM quâil y a dâĂ©lĂ©ments dans vos listes, vous pouvez utiliser la boucle for.
Utilisez les 2 méthodes suivantes pour manipuler vos tableaux en fonction de vos besoins :
Utilisez la fonction sort pour réordonner les éléments.
Utilisez la fonction filter pour éliminer les éléments non désirés et conserver les éléments choisis.
Et voilĂ , vous savez maintenant manipuler des listes en JavaScript ! Continuons dâexplorer les capacitĂ©s des listes dans le prochain chapitre avec la fonction map.