IntermédiaireNon commencé

Exercice 10.4 · 15 min · 0 tentative

Tri et filtre par catégorie

🎯 Objectif

Ajouter le tri par prix/nom et le filtre par catégorie aux produits.

📖 Contexte

L'app a déjà la recherche par titre. On va ajouter deux fonctionnalités supplémentaires : trier les résultats et filtrer par catégorie. Les trois filtres se combinent !

sort() : trier un tableau

sort() modifie le tableau original. Pour éviter ça, on travaille sur une copie :

const copie = tableau.slice()  // Copie du tableau

// Tri numérique (par prix)
copie.sort(function(a, b) {
  return a.price - b.price  // Croissant
})

// Tri alphabétique (par nom)
copie.sort(function(a, b) {
  return a.title.localeCompare(b.title)  // A → Z
})

La fonction de comparaison

sort() attend une fonction qui compare deux éléments :

  • Retourne négatifa vient avant b
  • Retourne positifb vient avant a
  • Retourne 0 → même position
TriCode
Prix ↑a.price - b.price
Prix ↓b.price - a.price
Nom A→Za.title.localeCompare(b.title)
Nom Z→Ab.title.localeCompare(a.title)

Combiner les filtres

L'idée est d'avoir une seule fonction appliquerFiltres() qui applique tout dans l'ordre :

  1. Recherche par texte
  2. Filtre par catégorie
  3. Tri

📝 Consigne

  1. Complète trierProduits(liste, critere) : utilise .sort() pour trier selon le critère choisi
  2. Complète le filtre par catégorie dans appliquerFiltres() : si une catégorie est sélectionnée, ne garde que les produits de cette catégorie
  3. Ajoute les addEventListener sur #categorie et #tri (événement "change")

Astuce : localeCompare() compare deux textes en respectant l'ordre alphabétique de la langue (accents, etc.).

Objectifs

  • Utiliser sort()
  • Select des catégories existe
  • Select du tri existe
  • Écouter le changement de catégorie
  • Écouter le changement de tri
  • Filtrer par catégorie

Lis bien les instructions et lance-toi !

Indices (0/3)

Indice 1 verrouillé
Indice 2 verrouillé
Indice 3 verrouillé