0

Ok. Je travaille donc sur une application qui récupère des éléments d'une base de données et construit une galerie. Je l'ai fait une tonne de fois, et cela devrait être simple.AS3 Filtrage des objets

Je rencontre des problèmes, car dans cette galerie, j'obtiens des résultats d'une base de données qui inclut à la fois des fichiers image et d'autres fichiers. Disons que je ne peux rien changer d'autre que le flash, donc j'ai besoin de détecter s'il s'agit d'une image, et de ne l'afficher que si c'est le cas.

Ma question est: Comment puis-je supprimer une propriété d'un objet sans que l'objet reste de la même taille? J'utilise une fonction count() pour générer des données de pagination, donc je ne peux pas simplement les 'annuler', et si je comprends bien, delete() n'est pas une option non plus. Ma solution pour cela était simplement de créer un autre objet, de filtrer les bons éléments avec une boucle for in, puis de les placer dans un autre objet, mais chaque élément de l'objet est un objet, et je n'ai pas push() fonction pour les objets. Donc, en désespoir de cause, j'utilise un incrément pour ajouter les objets au nouvel objet en utilisant un index (goodItemsObject [index] = allItemsObject [objet]), mais cela semble être une manière vraiment horrible de contourner ce problème .

Voici quelques code:

var filteredMO = new Object(); 
var newFile = 0; 
for each(var file in mediaObject){ 
if(check_file(file)){ 
    filteredMO[newFile] = file; 
    newFile++; 
} 
} 
mediaObject = filteredMO; 

check_file() retourne juste vrai ou faux, mediaobject est tout plein d'objets.

Je préfère de beaucoup à faire:

for each(var file in mediaObject){ 
    if(check_file(file)){ 
     //remove_from_object_for_reals(mediaObject[file]); 
    } 
} 

Je me rends compte que cela pourrait ne pas être possible (serait-il se débarrasser de la boucle?), Mais quelque chose de similaire serait doux. J'adorerais pouvoir laisser le GC saisir tous ces objets inutiles qui traînent.

des idées?

grâce,

Jesse

Répondre

0

Qu'est-ce que vous utilisez pour stocker votre objet est maintenant appelé un tableau associatif. Vous ne pouvez pas supprimer une valeur-clé d'un tableau associatif. Ce dont vous avez besoin est un dictionnaire (qui as3 a un built-in un http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html).

import flash.utils.Dictionary; 

var dict:Dictionary = new Dictionary(); 

vous pouvez supprimer une clé de votre dictionnaire en appelant

delete dict["myKey"] 
+0

Merci, je ne savais pas que la suppression des dictionnaires a été traité différemment. Sur un objet, la même commande produit un index avec la valeur "null" rejetant les fonctions count et for dans les instructions. – Jesse

+0

"Vous ne pouvez pas supprimer une valeur-clé d'un tableau associatif." - Ce n'est pas vrai. supprimer l'objet ["key"]; travaux. – Heitara