AS3对象过滤

时间:2009-08-04 11:35:00

标签: actionscript-3 garbage-collection object for-loop multidimensional-array

确定。所以我正在开发一个从数据库中检索项目并构建图库的应用程序。我做了很多次,应该很简单。

我遇到了问题,因为在这个库中,我从包含图像文件和其他文件的数据库中获得结果。我只想说除了闪光灯我不能改变任何东西,所以我需要检测它是否是一个图像,并且只显示它。

我的问题是:如果没有对象保持相同的大小,我怎么能从对象中删除属性?我使用count()函数来生成分页数据,所以我不能只是'空'它们,而且据我所知,delete()也不是一个选项。

我的解决方案是创建另一个对象,使用for循环过滤好项目,然后将它们弹出到另一个对象,但是对象中的每个项目都是一个对象,我没有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抓住所有这些无用的东西。

任何想法?

感谢,

杰西

1 个答案:

答案 0 :(得分:0)

现在用于存储对象的内容称为关联数组。您无法从关联数组中删除键值。你需要的是一本字典(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"]