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 tableaufor (const existingCategory of categories) {if (existingCategory === category) {exists = true;break;}}// Si la catégorie n'existe pas encore, on l'ajouteif (!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 uniqueslet 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