Boucle for each

[Résolu]
Signaler
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
-
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
-
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

Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
9
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'
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
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
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
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....=]
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
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....=]
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
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....=]
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
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