11329 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
suite de la suite du passage à ES6
Mes questions précédentes s'étant révélées fructueuse, je me permet de vous poser une autre question dans le même domaine.

J'ai actuellement un certain nombre de constructions de ce genre

var = WORKS[....]; //variable globale
...
for(let i= 0; i < WORKS.length; i++) WORKS[i] = new Work(WORKS[i]);

C'est à dire : dans le tableau WORKS qui contient des objets récupérés par AJAX, remplacer chaque item par un objet de la classe Work bâti sur le contenu de l'item.

Il me semble qu'on doit pouvoir exprimer ça sous la forme

WORKS.forEach(makeWorkObject);

mais je ne vois pas très bien à la lecture de la documentation comment écrire la fonction makeWorkObject

Même question si WORKS est un objet

var WORKS = {work1:data1, work2:data2,...}
...
for(let workID in WORKS) WORKS[workID] = new Work(WORKS[workID]);

mais là ça ne va pas le faire si j'ai bien compris la doc forEach
Modifié par PapyJP (02 Aug 2022 - 10:34)
Après quelques essais (et quelques bugs bien entendu) je suis arrivé à une solution

WORKS.forEach(work, i) => WORKS[i] = new Work(work);

et

for(const [workID, work] of Object.entries(WORKS)) WORKS[workID] = new Work(work);


Une petite question: j'ai trouvé cette dernière formulation dans cette page
Je ne vois pas pourquoi const fonctionne dans cette boucle, alors que c'est en permanence modifié.
Bonjour,

const fonctionne puisque les constantes ne sont justement pas modifiées/réaffectées en permanence : les constantes sont définies de manière indépendante à chaque tour de boucle.
Je comprends que chaque itération de la boucle crée son propre environnement. Mais si écrit

for(const i = 0: i < x; i++)…

Ça ne semble pas fonctionner parce que on ne pas faire i++ si i est déclaré par const.
Un peu subtil pour mon cerveau d’octogénaire Smiley eek
Merci Olivier
Comme quoi on se pose tous les mêmes questions quand on aborde un nouveau sujet... Smiley cligne