Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
JavaScript

Parcourir un objet : for…in, Object.keys, Object.values et Object.entries

Parcourir un objet : for…in, Object.keys, Object.values et Object.entries. Dans cette leçon du cours JavaScript, vous apprendrez à : parcourir les propriétés d'un objet avec for…in ; obtenir ses clés,...

0 chapitres 0 QCM Accès gratuit
Dans cet article

À propos de ce cours

Parcourir un objet : for…in, Object.keys, Object.values et Object.entries. Dans cette leçon du cours JavaScript, vous apprendrez à : parcourir les propriétés d'un objet avec for…in ; obtenir ses clés, ses valeurs ou ses paires avec Object.keys, values et entries ; utiliser les méthodes des tableaux sur un objet ; transformer un objet avec Object.fromEntries.

Chapitre 9 — Les objets littéraux, JSON et les collections · Parcourir un objet : for…in, Object.keys, Object.values et Object.entries

🎯 Objectifs de la leçon
• parcourir les propriétés d'un objet avec for…in;
• obtenir ses clés, ses valeurs ou ses paires avec Object.keys, values et entries;
• utiliser les méthodes des tableaux sur un objet ;
• transformer un objet avec Object.fromEntries.

1. Trois tableaux à partir d'un objet

Object.keys, values et entries
Figure 1 — Les trois méthodes renvoient des tableaux, que l'on peut parcourir et transformer.

const produit = { nom: "Clavier", prix: 249, stock: 12, categorie: "Informatique" };

// 1. for...in : parcourt les clés
for (const cle in produit) {
  console.log(`for...in → ${cle} = ${produit[cle]}`);
}

// 2. Object.keys, Object.values, Object.entries : des tableaux
console.log("keys    :", Object.keys(produit));
console.log("values  :", Object.values(produit));
console.log("entries :", Object.entries(produit));

// 3. for...of sur entries avec déstructuration
for (const [cle, valeur] of Object.entries(produit)) {
  console.log(`${cle.padEnd(10)} ${valeur}`);
}

// 4. Profiter des méthodes des tableaux
const panier = { clavier: 249, souris: 89, ecran: 1490, tapis: 35 };
const total = Object.values(panier).reduce((s, p) => s + p, 0);
const chers = Object.entries(panier).filter(([, prix]) => prix > 100).map(([article]) => article);
console.log("Total :", total, "DH | Articles > 100 DH :", chers.join(", "));

// 5. Transformer un objet : entries → map → fromEntries
const panierTTC = Object.fromEntries(Object.entries(panier).map(([a, p]) => [a, Math.round(p * 1.2)]));
console.log("TTC :", panierTTC);

// 6. Trier les entrées d'un objet
const classement = Object.entries(panier).sort(([, a], [, b]) => b - a);
console.log("Du plus cher au moins cher :", classement.map(([a, p]) => `${a} (${p})`).join(" > "));

// 7. for...in voit aussi les propriétés héritées ; Object.keys seulement les propres
const base = { couleur: "noir" };
const modele = Object.create(base);
modele.taille = "M";
const vuesParForIn = [];
for (const c in modele) vuesParForIn.push(c);
console.log("for...in :", vuesParForIn, "| Object.keys :", Object.keys(modele));

Résultat dans la console

for...in → nom = Clavier
for...in → prix = 249
for...in → stock = 12
for...in → categorie = Informatique
keys    : [ 'nom', 'prix', 'stock', 'categorie' ]
values  : [ 'Clavier', 249, 12, 'Informatique' ]
entries : [
  [ 'nom', 'Clavier' ],
  [ 'prix', 249 ],
  [ 'stock', 12 ],
  [ 'categorie', 'Informatique' ]
]
nom        Clavier
prix       249
stock      12
categorie  Informatique
Total : 1863 DH | Articles > 100 DH : clavier, ecran
TTC : { clavier: 299, souris: 107, ecran: 1788, tapis: 42 }
Du plus cher au moins cher : ecran (1490) > clavier (249) > souris (89) > tapis (35)
for...in : [ 'taille', 'couleur' ] | Object.keys : [ 'taille' ]

2. Quelle méthode choisir ?

  • for (const cle in objet): la boucle historique, qui donne les clés une à une. Elle parcourt aussi les propriétés héritées (dernier exemple), ce qui peut surprendre.
  • Object.keys(o), Object.values(o), Object.entries(o): seulement les propriétés propres de l'objet, sous forme de tableau. On peut alors utiliser for…of, map, filter, reduce, sort… C'est la méthode recommandée.
  • for (const [cle, valeur] of Object.entries(o)): la déstructuration donne la clé et la valeur dans deux variables (leçon 9.4).
  • Object.fromEntries(paires) fait l'inverse de entries: on transforme les paires, puis on reconstruit un objet.

N'utilisez pas for…in sur un tableau : préférez for…of (leçon 8.3).

ℹ️ À retenir
• Object.keys, values, entries: des tableaux des propriétés propres.
• for (const [k, v] of Object.entries(o)) pour parcourir clé et valeur.
• for…in voit aussi les propriétés héritées ; jamais sur un tableau.
• Object.fromEntries(Object.entries(o).map(…)) pour transformer un objet.

🛠 Activité 3 — Le panier d'achats

Mission : Un panier est représenté par un objet { article: quantite, … } et un catalogue par un objet { article: prixUnitaire, … }.

Questions pour avancer (répondez dans votre compte rendu, puis appliquez dans votre projet) :

  1. Affichez chaque ligne du panier sous la forme « 2 × clavier ». Quelle méthode utilisez-vous, et comment obtenez-vous la clé et la valeur ensemble ?
  2. Calculez le nombre total d'articles avec Object.values et reduce.
  3. Calculez le montant total en croisant le panier et le catalogue. Que se passe-t-il si un article du panier n'est pas au catalogue ? Comment le signaler ?
  4. Créez un nouveau panier où chaque quantité est doublée, sans modifier l'original, avec entries, map et fromEntries.
  5. Retirez du panier les articles dont la quantité vaut 0, en une seule chaîne de méthodes.
  6. Triez les lignes du panier de la plus chère à la moins chère (prix × quantité) et affichez le classement.

Je vérifie / je rends :

  • ☐ Le script et l'affichage du panier dans la console.

← Le tableau associatif en JavaScriptLa déstructuration et l'opérateur spread sur les objets →