map
const courses = [
{ name: "HTML", levels: ["L1", "L2"] },
{ name: "CSS", levels: ["L1", "L2"] },
{ name: "JS", levels: ["L2", "L3", "M1"] }
]
const levels = new Set(courses.reduce((acc, { levels: levels }) => ([...acc, ...levels]), []));
const programme = courses.reduce((a, { levels: levels, name }) => {
for (let level of levels) {
if (!a[level]) a[level] = [];
a[level].push(name);
}
return a;
}, {});
const menu = Object.entries(programme).map(([level, courses]) => {
return {
title: level,
subnav: courses.map((course) => {
return { title: course }
})
}
})
console.dir(JSON.stringify(menu));
Affiche.
[
{"title":"L1","subnav":[{"title":"HTML"},{"title":"CSS"}]}
,{"title":"L2","subnav":[{"title":"HTML"},{"title":"CSS"},{"title":"JS"}]}
,{"title":"L3","subnav":[{"title":"JS"}]}
,{"title":"M1","subnav":[{"title":"JS"}]}
]
this = un paramétre !
This doit être vu comme un paramétre.
This permet d'économiser du code en mémoire.
Exemple de code
- let user = { name: "John", f: say };
- let admin = { name: "Admin", f: say };
- function say(what="Hi") {
- console.log(`${what} ${this.name}`);
- }
- // these calls have different this
- // "this" inside the function is the object "before the dot"
- user.f("Hello"); // John (this == user)
- admin.f("Please"); // Admin (this == admin)
- admin['f']();
Pour connaitre la valeur du paramétre this. Il faut regarder l'objet qui appelle la fonction !
Erreur classique.
Il est important de comprendre que this n'est pas lié à user lors de la définition
Comme un paramétre classique, c'est lors de l'appel de la méthode que l'on connait la valeur de this.
Inscription à :
Articles (Atom)