Étape 10 – Trier les Pokémon par ordre alphabétique
🎯 Objectifs de l’étape
Dans cette étape, vous allez trier les Pokémon par nom (A → Z) avant de les afficher.
Ce tri doit s’appliquer même si aucun texte n’est saisi dans la recherche.
Vous apprendrez à :
- créer une propriété calculée pour trier un tableau,
- combiner tri et recherche dynamique.
📝 Étapes à suivre
- Dans
index.vue
, créez une nouvelle propriétécomputed
pour trier les Pokémon par ordre alphabétique :
js
const sortedPokemons = computed(() => {
return [...pokemonStore.pokemons].sort((a, b) =>
a.name.localeCompare(b.name)
)
})
💡 [...]
permet de créer une copie du tableau, pour ne pas modifier l’original.
- Modifiez la propriété
filteredPokemons
pour qu’elle s’applique sur la liste triée :
js
const filteredPokemons = computed(() => {
const query = search.value.toLowerCase().trim()
return sortedPokemons.value.filter(pokemon =>
pokemon.name.toLowerCase().includes(query)
)
})
✅ Résultat attendu
- Les Pokémon sont affichés par ordre alphabétique dès le chargement
- La recherche fonctionne toujours correctement
- Le tri est toujours actif après une recherche
📘 Documentation utile
🧠 Pourquoi séparer tri et recherche ?
1. Lisibilité
Chaque fonction (sortedPokemons
, filteredPokemons
) fait une seule chose clairement identifiable.
2. Performances
Vue optimise les computed
. Si seule la recherche change, le tri n’est pas recalculé inutilement.
3. Réutilisabilité
Le tableau trié (sortedPokemons
) peut être utilisé dans d’autres pages (ex : favoris) sans dupliquer le tri.
💡 Suggestion bonus
Plus tard, vous pourrez permettre à l’utilisateur de choisir l’ordre de tri via un menu déroulant (v-select
).
Exemple :
js
const sortDirection = ref('asc')
const sortedPokemons = computed(() => {
return [...pokemonStore.pokemons].sort((a, b) =>
sortDirection.value === 'asc'
? a.name.localeCompare(b.name)
: b.name.localeCompare(a.name)
)
})