Pages

Les tableaux d'objets !

const basket = [

  { name: "orange", price: 1, category: "fruit", quantity: 2 },
  { name: "poireau", price: 1, category: "vegetable", quantity: 3, origin: "USA"},
  { name: "ananas", price: 1, category: "fruit", quantity: 1, origin: "USA" },
  { name: "Pamplemousse", price: 12, category: "fruit", quantity: 4 },
  { name: "Carotte", price: 1, category: "vegetable", quantity: 5 },
];

Voici quelques algorithmes utiles pour manipuler et analyser ce tableau en JavaScript. On ne dispose d'aucune méthode sur les tabkeaux.

1. Calculer le prix total de tous les articles :

⛔ for-i
let totalPrice = 0;
for (let i = 0; i < basket.length; i++) {
  totalPrice += basket[i].price * basket[i].quantity;
}
console.log(totalPrice);
✅ for-of + destructuration 
let totalPrice = 0;

for (const { price, quantity } of basket) {
  totalPrice += price * quantity; // Utilise directement les propriétés déstructurées
}

2. Filtrer les articles par catégorie : Par exemple, sélectionner tous les fruits :

⛔ for-i
let fruits = [];
for (let i = 0; i < basket.length; i++) {
  if (basket[i].category === "fruit") {
    fruits.push(basket[i]);
  }
}
console.log(fruits);
✅ for-of + recopie de la référence ! 
let fruits = [];

for (const item of basket) {
  if (item.category === "fruit") {
    fruits.push(item); // Ajoute la réf à la catégorie "fruit"
  }
}



🚫 Attention 
let fruits = [];

for (const item of basket) {
  if (item.category === "fruit") {
    fruits.push({ ...item }); // Ajoute l'objet correspondant à la catégorie "fruit"
  }
}
🧨 ici, on {...item} crée une copie (superficielle) de l'objet.

🥷Imaginez que chaque item du panier est un attribut détail

cconst basket = [ { category: "fruit", name: "pomme", details: { color: "rouge" } } ]; const copiedItem1 = { ...basket[0] }; const copiedItem2 = Object.assign({}, basket[0]); // copie superficielle également copiedItem1.details.color = "vert"; 🧨console.log(basket[0].details.color); // "vert" (modification aussi faite dans l'objet original)

3. Trouver le produit le plus cher :

⛔ for-i
let mostExpensive = basket[0];
for (let i = 1; i < basket.length; i++) {
  if (basket[i].price * basket[i].quantity > mostExpensive.price * mostExpensive.quantity) {
    mostExpensive = basket[i];
  }
}
console.log(mostExpensive);
let mostExpensive = basket[0];

for (const item of basket) {
  if (item.price * item.quantity >mostExpensive.price * mostExpensive.quantity) {
    mostExpensive = item;
  }
}
Attention à ce code
let mostExpensive = basket[0];

for (const { price, quantity, ...rest } of basket) {
  if (price * quantity > mostExpensive.price * mostExpensive.quantity) {
    mostExpensive = { price, quantity, ...rest }; // Met à jour le produit le plus cher
  }
}


5. Trouver les catégories
⛔ for-i, c'est terminé


function findUniqueCategories(basket) {
  let categories = [];

  for (const { category } of basket) {
    let exists = false;

    // Vérifie si la catégorie existe déjà dans le tableau
    for (const existingCategory of categories) {
      if (existingCategory === category) {
        exists = true;
        break;
      }
    }

    // Si la catégorie n'existe pas encore, on l'ajoute
    if (!exists) {
      categories.push(category);
    }
  }

  return categories;
}

6. Trouver les produits les plus chers par catégories
function findMostNumerousPerCategory(basket) {
  let categories = findUniqueCategories(basket); // Liste des catégories uniques
  let mostNumerous = [];

  for (const category of categories) {
    let maxItem = null;

    for (const item of basket) {
      if (
        item.category === category &&
        (!maxItem || item.quantity > maxItem.quantity)
      ) {
        maxItem = item;
      }
    }

    if (maxItem) mostNumerous.push(maxItem); // Ajoute l'élément le plus nombreux
  }

  return mostNumerous;
}

Il vous reste à faire une boucle sur les items pour ajouter dans la structure un attribut





Une sequence dans une autre !




Entrainement au DS

 

delta encoding

Le codage par différence (delta encoding en anglais) permet de compresser un tableau de données en indiquant pour chaque donnée, sa différence avec la précédente (plutôt que la donnée elle-même). On se retrouve alors avec un tableau de données assez petites nécessitant moins de place en mémoire. Cette méthode se révèle efficace lorsque les valeurs consécutives sont proches.


Programmer la fonction delta qui prend en paramètre un tableau non vide de nombres entiers et qui renvoie un tableau contenant les valeurs entières compressées à l’aide cette technique.


delta([100000, 100000, 100001, 100002, 100002])



 Gene

La fonction recherche prend en paramètres deux chaines de caractères gene et seq_adn et renvoie True si on retrouve gene dans seq_adn et False sinon. Implémenter la fonction recherche.

console.log(recherche("AATC", "GTACAAATCTTGCC")); //true

console.log(recherche("AGTC", "AAGTCGCC")) // true


Une interface





Entrainement au DS

 L’occurrence d’un caractère

L’occurrence d’un caractère dans un phrase est le nombre de fois où ce caractère est présent.

Exemples :

  • l’occurrence du caractère ‘o’ dans ‘bonjour’ est 2 ;
  • l’occurrence du caractère ‘b’ dans ‘Bébé’ est 1 ;
  • l’occurrence du caractère ‘B’ dans ‘Bébé’ est 1 ;
  • l’occurrence du caractère ‘ ‘ dans ‘Hello world !’ est 2.

On cherche les occurrences des caractères dans une phrase. On souhaite stocker ces occurrences dans un objet dont les clefs seraient les caractères de la phrase et les valeurs l’occurrence de ces caractères.

Par exemple : avec la phrase 'Hello world !' le dictionnaire est le suivant :

{'H': 1,'e': 1,'l': 3,'o': 2,' ': 2,'w': 1,'r': 1,'d': 1,'!': 1}

Écrire une fonction occurrence_lettres prenant comme paramètre une variable phrase de type str. Cette fonction doit renvoyer un objet constitué des occurrences des caractères présents dans la phrase.


 Rendre la monnaie.




On s’intéresse au problème du rendu de monnaie. On suppose qu’on dispose d’un nombre infini de billets de 5 euros, de pièces de 2 euros et de pièces de 1 euro. 

Le but est d’écrire une fonction nommée rendu dont le paramètre est un entier positif non nul somme_a_rendre et qui retourne une liste de trois entiers n1n2 et n3 qui correspondent aux nombres de billets de 5 euros (n1) de pièces de 2 euros (n2) et de pièces de 1 euro (n3) à rendre afin que le total rendu soit égal à somme_a_rendre.

On utilisera un algorithme glouton. Autrement dit, on commencera par rendre le nombre maximal de billets de 5 euros, puis celui des pièces de 2 euros et enfin celui des pièces de 1 euros.