代码之家  ›  专栏  ›  技术社区  ›  Jesse

AS3对象过滤

  •  0
  • Jesse  · 技术社区  · 15 年前

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

    我遇到了一些问题,因为在这个图库中,我从一个包含图像文件和其他文件的数据库中得到了结果。假设除了闪光灯我什么都不能改变,所以我需要检测它是否是一个图像,如果是,只显示它。

    我的问题是:如果对象不保持相同的大小,我怎么能从对象中删除属性呢?我使用count()函数来生成分页数据,所以我不能只“空”它们,而且据我所知,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抓住所有挂在外面的无用对象。

    有什么想法吗?

    谢谢,

    杰西

    1 回复  |  直到 15 年前
        1
  •  0
  •   David    15 年前

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