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