Pages

JS / code NSI

 https://github.com/dupontdenis/Code-NSI

JS / test

 🥷Voici un exemple d'utilisation de ces fonctions JS pour WEB.

Le JS permet d'ajouter un marqueur sur des objets à mettre en avant (ici en rouge) et de les transformer en balises HTML ! 

Le CSS permet d'affecter les objets dans une grille nommée.

Exemple : Le Panier

Les objets d'un panier triés par catégorie avec le produit le plus cher en rouge https://dupontdenis.github.io/L1ex2025/

Exemple : Les régions

Les villes triées par région avec la ville la plus peuplée en rouge !

https://dupontdenis.github.io/L12025Villes/


🆒Comprendre le sujet : Explications générales

Voici les différentes phases qui permettent de marquer l’élément le plus cher dans chaque catégorie.

  1. Identification des catégories uniques

    • La fonction findAllCategories(array) crée un tableau contenant toutes les catégories distinctes présentes dans basket.

  2. Ajout du prix total à chaque élément

    • La fonction addTotalPrice(array) parcourt chaque objet du tableau et calcule son prix total (totalPrice) en multipliant price par quantity.

  3. Détermination du produit le plus cher par catégorie

    • findMostExpensiveForEachCategory(array, arrayCategory) parcourt chaque catégorie et identifie l'élément avec le plus grand totalPrice.

  4. Marquage des produits les plus chers

    • markMostExpensive(items) ajoute une propriété mostExpensive = true aux produits identifiés comme étant les plus chers.

  5. Transformation des données

    • La fonction transformBasket(array) reformate le tableau en ne conservant que les propriétés name, category et mostExpensive.

  6. Génération de la liste HTML (hors examen)

    • createList(array) génère une liste <ul> avec des éléments <li> et ajoute une classe CSS spécifique aux produits les plus chers.

Ces étapes assurent une structure logique et claire pour identifier les produits les plus chers et les afficher de manière pertinente (pas au programme).

Voici une illustration des résultats attendus 

Identification des catégories uniques


Ajout du prix total à chaque élément



Détermination du produit le plus cher par catégorie


Mise à jour des données (ajout d'un attribut)


Transformation des données (Nouveau tableau)


Grâce au CSS, on affecte les objets dans la grille. La magie des grilles nommée avec l'attribut dense est remarquable. 

Code

🆘Corrigé

  1. function findAllCategories(array) {

  2.   const categories = []; // Initialise un tableau vide pour stocker les catégories


  3.   for (const item of array) {

  4.     let exists = false; // Initialise une variable pour vérifier si la catégorie existe déjà

  5.     for (const category of categories) {

  6.       if (category === item.category) {

  7.         exists = true; // Si la catégorie existe déjà, on met la variable à true

  8.         break; // Sort de la boucle

  9.       }

  10.     }

  11.     if (!exists) {

  12.       categories.push(item.category); // Ajoute la catégorie si elle n'est pas déjà présente

  13.     }

  14.   }


  15.   return categories; // Retourne le tableau des catégories

  16. }


  17. const categories = findAllCategories(basket); // Appel de la fonction pour trouver toutes les catégories

  18. console.log(categories); // Affiche les catégories uniques


code

🆘Corrigé

  1. // Add a new attribute `totalPrice` to each object in the basket array

  2. // Use only a `for...of` loop

  3. function addTotalPrice(array) {

  4.   for (const item of array) {

  5.     item.totalPrice = item.price * item.quantity; // Calculate and add totalPrice

  6.   }

  7. }

  8. addTotalPrice(basket); // Add totalPrice to each item in the basket

code


🆘Corrigé

  1. function findMostExpensiveForEachCategory(array, arrayCategory) {

  2.   const mostExpensiveItems = []; // Initialize an array for the most expensive items


  3.   for (const category of arrayCategory) {

  4.     let mostExpensiveItem = null; // Initialize the most expensive item for the category


  5.     for (const item of array) {

  6.       if (item.category === category) {

  7.         // Check if the item belongs to the current category

  8.         if (

  9.           !mostExpensiveItem ||

  10.           item.totalPrice > mostExpensiveItem.totalPrice

  11.         ) {

  12.           mostExpensiveItem = item; // Update the most expensive item

  13.         }

  14.       }

  15.     }


  16.     if (mostExpensiveItem) {

  17.       mostExpensiveItems.push(mostExpensiveItem); // Add the most expensive item to the array

  18.     }

  19.   }


  20.   return mostExpensiveItems; // Return the array of most expensive items

  21. }


  22. // Call the function to find the most expensive items for each category

  23. // and log the result

  24. const mostExpensiveItems = findMostExpensiveForEachCategory(basket, categories);

  25. console.log(mostExpensiveItems); // Display the most expensive items for each arrayCategory


code


🆘Corrigé

  1. // Add a property to mark the most expensive items

  2. function markMostExpensive(items) {

  3.   for (const item of items) {

  4.     item.mostExpensive = true; // Mark the item as the most expensive

  5.   }

  6. }

  7. markMostExpensive(mostExpensiveItems); // Mark the most expensive items

  8. console.log(mostExpensiveItems);

code


🆘Corrigé

  1. function transformBasket(array) {

  2.   const transformedArray = [];

  3.   for (const { name, category, mostExpensive } of array) {

  4.     transformedArray.push({ name, category, mostExpensive }); // Extract and push the properties

  5.   }

  6.   return transformedArray;

  7. }


  8. // Call the function and log the transformed basket

  9. const newBasket = transformBasket(basket);


code


Écriture plus compacte

code


CSS trombino

Voir https://dupontl1.blogspot.com/2025/02/td-6-trombinoscope.html


L'idée est d'avoir un code qui s'adapte à la taille du conteneur. Voici le même trombino avec un conteneur plus petit.