(« Mais comment je boucle lĂ -dessus en JavaScript ?! » â cet article est pour toi)
đ§ Dâabord, on se dĂ©tend : quâest-ce que âlâitĂ©rationâ ?
LâitĂ©ration, câest en fait trĂšs simple :
đ AccĂ©der aux Ă©lĂ©ments dâune chose, un par un
On le fait déjà dans la vraie vie :
- đ On mange une pizza part tranche par tranche
- đș On regarde une sĂ©rie Ă©pisode par Ă©pisode
- đ§ On Ă©coute une playlist morceau par morceau
En JavaScript, certaines structures disent :
« Tu peux me parcourir Ă©tape par Ă©tape, roi đ »
Ces structures sâappellent des Iterables.
đ€ Que veut dire âIterableâ ? (DĂ©finition lĂ©gendaire en une phrase)
Un iterable, câest quelque chose que tu peux parcourir avec for...of.
Câest tout.
Le reste, câest de lâoverthinking đ
â Quelles structures sont iterables ? (La liste en or)
Les structures iterables par défaut en JavaScript :
| Structure | Iterable ? |
|---|---|
| Array | â |
| String | â |
| Map | â |
| Set | â |
| arguments | â |
| NodeList | â |
Objet simple {} | â (on va se chamailler lĂ -dessus bientĂŽt) |
đą Parcourir un tableau (le plus facile)
const fruits = ["đ", "đ", "đ"];
for (let fruit of fruits) {
console.log(fruit);
}
đ§ Que se passe-t-il ici ?
for...ofâ donne la valeur elle-mĂȘmefruitâ un Ă©lĂ©ment Ă chaque tour- RĂ©sultat :
đ
đ
đ
đ Astuce :for...of = « donne-moi la valeur »for...in = « donne-moi la clĂ© » (on y arrive)
đ€ Les strings sont aussi iterables (surprise !)
const name = "Cansu";
for (let char of name) {
console.log(char);
}
đ§ RĂ©sultat :
C
a
n
s
u
đĄ Mini-info :
JavaScript peut découper une string caractÚre par caractÚre
Ăa marche aussi avec les emojis đ
đš Grosse dĂ©ception : pourquoi on ne peut pas itĂ©rer sur un objet ?
const user = {
name: "Cansu",
age: 25
};
for (let item of user) {
console.log(item);
}
đ„ ERREUR !
JavaScript dit :
« FrĂ©rot⊠aucune idĂ©e de comment parcourir ça đ€·ââïž Â»
Parce que :
- Les objets nâont pas dâordre garanti
- JavaScript ne sait pas quelle rĂšgle suivre
MAISâŠ
Nous, on est plus malins que JavaScript đ
đ ïž Les façons dâitĂ©rer sur un objet
(Le trio sauve-la-vie)
1ïžâŁ Object.keys() â Parcourir les clĂ©s
const user = {
name: "Cansu",
age: 25,
job: "Frontend Dev"
};
const keys = Object.keys(user);
for (let key of keys) {
console.log(key);
}
đ§ Explication :
Object.keys(user)â["name", "age", "job"]- On a maintenant un tableau
- Tableau = iterable đ
đ Quand lâutiliser ?
Quand seules les clĂ©s tâintĂ©ressent.
2ïžâŁ Object.values() â Parcourir les valeurs
const values = Object.values(user);
for (let value of values) {
console.log(value);
}
đ§ RĂ©sultat :
Cansu
25
Frontend Dev
đ Quand lâutiliser ?
Quand les clĂ©s nâimportent pas et que tu veux juste les valeurs.
3ïžâŁ Object.entries() â MODE LĂGENDAIRE đ„
const entries = Object.entries(user);
for (let [key, value] of entries) {
console.log(`${key} â ${value}`);
}
đ§ RĂ©sultat :
name â Cansu
age â 25
job â Frontend Dev
đ Pourquoi câest gĂ©nial ?
- Tu obtiens la clé et la valeur
- Destructuring âš
- Propre, lisible, moderne
Ăa donne un vrai vibe de dev senior đ
âïž for...in vs for...of (on clarifie)
for...in
for (let key in user) {
console.log(key);
}
- Retourne les clés
- Fonctionne sur les objets
- RisquĂ© Ă cause de la chaĂźne de prototypes đŹ
for...of
for (let item of array) {
console.log(item);
}
- Retourne les valeurs
- Nécessite un iterable
- Moderne et sĂ»r â
đ RĂšgle dâor :
Objet + JS moderne = Object.entries() + for...of
đ§ââïž La vraie magie : Symbol.iterator
Si quelque chose est iterable, il possĂšde cette porte secrĂšte :
Symbol.iterator
Quand JavaScript voit ça, il se dit :
« OK, je sais comment parcourir ça. »
đ ïž CrĂ©ons notre propre objet iterable (Level Up âŹïž)
const counter = {
start: 1,
end: 5,
[Symbol.iterator]() {
let current = this.start;
let last = this.end;
return {
next() {
if (current <= last) {
return { value: current++, done: false };
}
return { done: true };
}
};
}
};
Utilisation :
for (let number of counter) {
console.log(number);
}
đ§ RĂ©sultat :
1
2
3
4
5
đ Que se passe-t-il dans ce code ?
[Symbol.iterator]()â condition pour ĂȘtre iterablenext()â appelĂ© Ă chaque tourvalueâ valeur courantedone: trueâ « câest fini » đŠ
đ Ă quoi ça sert ?
- Structures de données personnalisées
- ContrĂŽle des boucles infinies
- Comprendre les generators en profondeur
đ BONUS : la version facile avec les generators
function* counterGen(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
for (let num of counterGen(1, 5)) {
console.log(num);
}
đĄ Plus court
đĄ Plus lisible
đĄ Plus moderne
đ§ Super astuces (Ă sauvegarder â)
forEachâbreakne fonctionne pasfor...ofâbreak&continuefonctionnent- Besoin de performance ? â
for...of - Parcourir un objet ? â
Object.entries()
đŹ Conclusion (avec le cĆur)
Tout nâest pas iterable en JavaScriptâŠ
mais ceux qui savent rendre les choses iterables gagnent la partie đâš

