Bonjour,
j’ai regardé tout le code. C’est loin d’être minimal, il y a plein de « bruit » à la lecture du code, notamment l’usage de Bootstrap.
Je devine que vos enseignants ou enseignantes vous ont fourni un squelette de code avec des parties déjà écrites. Mais difficile de savoir lesquelles.
Je ne peux pas faire grand chose à part donner quelques conseils d’ordre général :
D’abord, je vois que vous utilisez le mode strict. C’est bien. Ça vous signale, entre autres, les variables non déclarées, et j’en ai vu quelques-unes. Ouvre la console pour voir les messages d’erreur.
Il y a également des directives ESLint. Si tu n’as pas de module ESLint dans ton environnement de dév, tu peux utiliser un linteur en ligne, par exemple https://jshint.com/.
J’ai l’impression que les notions de portée des variables ne sont pas maîtrisées. Pour éviter les pièges, abandonnez var, utilisez const au maximum, et quand vous avez vraiment besoin qu’une variable soit modifiable, utilisez let.
Il y a quelques confusions entre les méthodes de tableau .forEach() et .map(). N’utilise .map() que quand tu attends en résultat un nouveau tableau. Sinon, utilise .forEach(), ce n’est pas seulement une question d’optimisation, ça exprime aussi ton intention et ça rend le code plus lisible.
Petit détail à propos des fonctions de tri :
1 2 3 4 5 6 7 8 9 10 11
| function trie_sujet_alphabetique(a, b) {
const txta = a.topic;
const txtb = b.topic;
if (txta < txtb) return -1;
if (txta > txtb) return 1;
return 0;
}
function trie_sujet_alphabetiqueInv(a, b) {
return -trie_sujet_alphabetique(a, b);
} |
Le return 0 indique que les valeurs a et b sont égales, ça permet au moteur d’économiser une ou deux opérations dans ce cas. C’est une légère optimisation.
Quand tu as besoin de chaînes constantes, par exemple ici :
if (state.sort == "NONE" || state.sort == "decroissant") {
La moindre faute de frappe fait échouer silencieusement. Par exemple, essaye de voir la différence entre la ligne ci-dessus et la suivante :
if (state.sort == "NONE" || state.sort == "dercoissant") {
Pour éviter cet écueil, dans tous les langages on a recours à la déclaration d’une constante. Avec des constantes, les fautes de frappe lèvent des erreurs claires au lieu d’échouer silencieusement.
JavaScript offre en plus un type de donnée spécial : les symboles.
1 2 3 4 5 6
| const SORT_NONE = Symbol("NONE");
const SORT_DESC = Symbol("decroissant");
...
if (SORT_NONE === state.sort || SORT_DESC === state.sort) { |
Voir aussi égalité stricte et condition Yoda.
Note, s’il y a plus de deux valeurs à tester, ça devient intéressant d’utiliser un switch. En JS, le switch fait des comparaisons strictes.
Un truc qui simplifie la vie pour les dates : .toLocaleString()
Partager