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