Je sèche sur un petit pb de code.. Je dois manquer d'expérience. Et après plusieurs heures de recherche sur la toile je n'ai toujours pas trouvé de réponse à ma solution.
Je dev un petit bout de code qui me pose pb :
for (var i = 0; i < lvl_collecte; i++) {
for (var x = 0; x < archer_world - 1; x++) {
tabSend[x].send = 0;
}
console.log("Niveau :", tabScavenge[i].id);
for (j = 0; j < archer_world - 1; j++) {
while (tabScavenge[i].quantity > 0 && tabunits[j].number > 0) {
tabScavenge[i].quantity -= tabunits[j].carry;
tabunits[j].number--;
tabSend[j].send++;
};
}
tabTotalSend[i].valeur = tabSend;
console.log(tabSend);
console.table(tabSend);
}
return tabTotalSend;
Tout cela est dans un fonction qui return tabTotalSend (un array)
Mon tableau retourne la dernière valeur de l'itération.. pour une raison que je n'explique pas.. Et ce qui est le plus étrange, c'est qu'après certains tests qd je souhaite afficher tabSend (qui donc est un tableau qui vient s'inclure dans les valeurs de mon tableau tabTotalSend) et bien le console.table me renvoit bien les valeurs a chaque itérations de la boucle mais le console.log ne me renvoit que la valeur de la dernière itération.
Aussi moi je souhaiterai que mon tableau total (tabTotalSend) s'incrémente bien de toutes les valeurs du tableau d'envoi (tabSend) à chaque itération de la boucle..
Pas évident à expliquer, mais j'espère que vous aurez compris..
Je pose aussi une capture d'écran de mon résultat dans la console :
Salut, tu peux essayer de reproduire sur JSFiddle et nous copier le liens, sans données, et voir l'algo comme ça c'est assez compliqué mais si tu arrive à reproduire sur https://jsfiddle.net/ je pourrais t'aider mais comme ça, je ne vois pas ce qui cloche
Le console.table renvoi bien les bonnes valeurs mais le array qui est relié renvoi les valeurs de la dernière itération de la boucle for ! Pourquoi ? Je ne comprends pas du tout la logique..
Si jamais vous êtes en mesure de m'apporter un éclairage sur ce point que je ne maitrise pas, je vous en serais très reconnaissant.
console.log est asynchrone, tu remplis ton tableau et tu fais bien un console.log pour chaque itération mais tu console.log un array. A savoir qu'en js, les variables contenant les array et les objets font référence à l'emplacement de l'objet dans la mémoire (c'est pour ça que {} === {} revoie false). Donc lorsque tu console.log un array ou un objet, la console vas aller chercher l'objet en mémoire, et comme cet objet est déjà remplis, il l'affiche tel quel.
Donc console.log est asynchrone et console.table ne l'est pas ? Par contre sur la doc de MSDN, j'ai un peu de mal à comprendre "mais est la valeur de l'objet au moment où vous cliquez dessus." ils entendent quoi pas cliquez dessus parce que je vois pas comment on peux cliquer un objet ><
Notez que si vous consignez des objets dans les dernières versions de Chrome et Firefox, ce que vous avez enregistré sur la console est une référence à l'objet, qui n'est pas nécessairement la «valeur» de l'objet au moment où vous appelez la console.log (), mais est la valeur de l'objet au moment où vous cliquez dessus.
Je ne sais pas si tu as compris tout seul où pas, je vais essayer d'expliquer avec des termes simples. En js, tout ce qui est objet ou tableau est stocké en mémoire. Toutes les variables de type objet ou tableau ne contiennent pas un objet ou un tableau mais une référence à l'objet ou le tableau qui est en mémoire. Je ne sais pas comment marche console.table, je ne m'y suis jamais intéressé. Console.log n'est pas vraiment asynchrone, mais il ne vas pas afficher l'objet ou le tableau au moment où la ligne est exécutée, il vas afficher un lien vers la référence de l'objet ou du tableau, et quand tu déplie l'objet ou le tableau, il l'affiche tel qu'il est à l'instant où tu le déplie (c'est à dire une fois que le reste du code a été exécuté).
Oui c'est très clair, et j'avais aussi compris le fonctionnement avant ton dernier commentaire c'est juste que pour moi, en tout cas la doc de msdn est assez "bancale".
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
► Rejoignez la communauté
► Rejoignez la communauté
► Rejoignez la communauté