Boucle for each

Résolu
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 20 avril 2009 à 10:56
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 20 avril 2009 à 12:26
Bonjour,
voilà, je reprends les bases de l'as3... ou plutôt je les prends... apprends. Bref, je suis sur les boucles.
Exercices simples :
var personnage:Object={prenom:"Bobby",age:50};

//boucle donnant les propriétés de l'objet
for(var p:String in personnage){
    trace("les propriétés du personnage sont : "+p);
}
//boucle for each accédant aux valeurs d'un objet
for each ( var valeur:* in personnage){
    trace("les valeur du personnage sont : "+valeur);
}

J'ai voulu afficher les deux en même temps pour avoir un trace qui me donnerait :
la propriété prenom du personnage a pour valeur Bobby

J'ai essayé de croiser les boucle mais ce n'est pas satisfaisant... deux fois le résultat, une bonne attribution, et une mauvaise. J'ai essayé de créer un tableau pour récupérer les valeurs de chaque boucle, mais je ne récupère, au mieux que la première valeur, en plus ma méthode pour récupérer les valeurs étaient très artificelle... bref ça marche pas.
Quelqu'un a-t-il une piste pour arriver au résultat escompté.
Merci d'avance.

Tout vient à qui sait attendre

7 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
20 avril 2009 à 11:55
Salut,

le soucis c'est que dans "for each", la valeur de la variable donnée sera fonction de son type et du nombre de données contenues dans l'objet ciblé.

prenons un exemple :

var toto:Object = {var1:"oui", var2:128, var3:new Point(128,164), var4:["abs", Math.sqrt(128), 12]}
for each(var tata:* in toto) {
    trace (tata);
}

nous ressort :

abs,11.313708498984761,12
oui
128
(x=128, y=164)

Ce qui prouve bien qu'il n'y a pas d'ordres dans un object ... et donc que tu ne peux pas savoir par cette méthode quelle variable est ciblée.

Ce que tu cherches à faire est plutôt axé XML et tu dois, pour ça, avoir les noms des champs à cibler.
Le for-each servirait plutôt à parcourir nue liste de noeuds dans les quels tu piocherais les infos pour les formater à ta guise, tels que :

var xml:XML =
<main>
    <member nom="jean" age="12" />
    <member nom="pierre" age="18" />
    <member nom="alain" age="16" />
</main>
var list:XMLList = xml.member;
for each(var tata:XML in list) {
    trace ("les valeur du personnage sont : age="+tata.@age, "nom="+tata.@nom);
}

Nous ressort bien :

les valeur du personnage sont : age=12 nom=jean
les valeur du personnage sont : age=18 nom=pierre
les valeur du personnage sont : age=16 nom=alain

Peg'
3
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
20 avril 2009 à 12:05
Hello,

for ( var valeur:* in personnage){
    trace("la propriété "+ valeur +" du personnage a pour valeur "+ personnage[valeur]);
}

-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
3
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
20 avril 2009 à 10:58
Ah oui, pardon, le but est même d'afficher :
la propriété prenom du personnage a pour valeur Bobby
la propriété age du personnage a pour valeur 50

Ou bien
la propriété prenom du personnage a pour valeur Bobby et son age est de 50

Tout vient à qui sait attendre
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
20 avril 2009 à 11:53
Salut,
essaye ceci :

//boucle for each accédant aux valeurs d'un objet

for(var valeur:String in personnage){

    trace("les valeur du personnage sont : "+
personnage[valeur]);
}

bali_balo....=]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
20 avril 2009 à 11:55
PARDON,
CECI FONCTIONNE (j'ai testé !)

var personnage:Object={prenom:"Bobby",age:50};

//boucle donnant les propriétés de l'objet
for(var p:String in personnage){
    trace("les propriétés du personnage sont : "+p);
}
//boucle for each accédant aux valeurs d'un objet
for( var valeur:String in personnage){
    trace("les valeur du personnage sont : "+personnage[valeur]);
}

bali_balo....=]
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
20 avril 2009 à 11:58
Oui, effectivement comme le dit Peg', il n'y a pas d'ordre dans l'utilisation for - in et dans un for - each

bali_balo....=]
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
20 avril 2009 à 12:26
Bonjour et merci à tous pour vos réponses , leur justesse et leur rapidité.
Le script d'Orange73 fonctionne, mais je comprends qu'il doit être plus judicieux d'utiliser la méthode de Pégase31 dans une réelle construction d'utilisation d'objet.
Merci à tous, et je vais continuer ma lecture de Pratique d'action script 3 de Thibault Imbert qui m'a l'air d'être une bonne base à l'apprentissage d'AS3.
Encore merci et vive Flashkod et ses merveilleux participant !!!!

Tout vient à qui sait attendre
0