AS3オブジェクトフィルタリング
-
22-07-2019 - |
質問
わかりました。だから、データベースからアイテムを取得してギャラリーを構築するアプリに取り組んでいます。私はこれを何回も行ってきましたが、それは簡単なはずです。
このギャラリーでは、画像ファイルとその他のファイルの両方を含むdbから結果が得られるため、問題が発生しています。フラッシュ以外は何も変更できないので、イメージであるかどうかを検出し、イメージがある場合にのみ表示する必要があるとしましょう。
私の質問は次のとおりです。オブジェクトが同じサイズのままでなくても、どのようにしてオブジェクトからプロパティを削除できますか? count()関数を使用してページネーションデータを生成するため、それらを「null」にすることはできません。また、理解しているように、delete()もオプションではありません。
これに対する私の解決策は、別のオブジェクトを作成し、for inループで適切なアイテムをフィルターし、それらを別のオブジェクトにポップすることでしたが、オブジェクト内の各アイテムはオブジェクトであり、push()関数はありませんオブジェクト用。
したがって、必死に、増分(goodItemsObject [index] = allItemsObject [object])を使用してオブジェクトを新しいオブジェクトに追加していますが、これはこの問題を回避するための本当に恐ろしい方法のようです。
ここにいくつかのコードがあります:
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()はtrueまたはfalseを返すだけで、mediaObjectはすべてオブジェクトでいっぱいです。
これを行うことを非常に好む:
for each(var file in mediaObject){
if(check_file(file)){
//remove_from_object_for_reals(mediaObject[file]);
}
}
それは不可能かもしれませんが(forループから外れるのでしょうか?)、似たようなものがいいでしょう。 gcがこれらすべての役に立たないオブジェクトをぶらぶらできるようにしたいです。
アイデアはありますか
ありがとう、
ジェシー
解決
オブジェクトの保存に使用しているものは、連想配列と呼ばれます。連想配列からKey-Valueを削除することはできません。必要なのは辞書です(as3には組み込みの http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html )。
import flash.utils.Dictionary;
var dict:Dictionary = new Dictionary();
その後、呼び出すことで辞書からキーを削除できます
delete dict["myKey"]