Actionscript 3:当元素是对象/类实例时,识别要删除的数组元素

Posted

技术标签:

【中文标题】Actionscript 3:当元素是对象/类实例时,识别要删除的数组元素【英文标题】:Actionscript 3: Identifying an array element to delete when the elements are objects/class instances 【发布时间】:2018-05-25 08:52:12 【问题描述】:

我有一个对象数组,其中一些是影片剪辑和一些类的实例。我需要从数组中删除一个项目,但正在苦苦思考如何最好地识别要删除的数组索引。

我目前正在使用此代码,它确实有效

                    var i:int;
                    for (i = 0; i < list.length; i++) 

                        if (list[i].toString() == '[object myClass]') 
                            trace('found', i);
                            list.removeAt(i);
                        

                    

我认为必须存在更好的方法来获取对象名称并且无需遍历数组。

【问题讨论】:

如果您可以从数组更改为字典,则可以将搜索代码减少到一步,而不是像您正在做的那样循环遍历数组。当然,这将需要对填充数组的代码进行一些更改。根据您的要求,这可能可行,也可能不实用。 【参考方案1】:

我可以稍微澄清一下您希望如何识别应删除的对象。如果您想简单地删除任何属于 myClass 类实例的对象,我建议您使用 is 关键字。

另外,一个警告,在您迭代列表时从列表中删除项目只是自找麻烦。如果您删除index [0] 的对象,那么以前位于index [1] 的对象现在是index [0],但您的for 循环将在每次迭代结束时将i 递增1,因此您永远不会检查index [0] 再次。因此,您可以跳过一个或多个要删除的对象。

而是尝试迭代它 backwards-- 应该可以解决该问题。

这两个建议的组合如下所示:

for (var i:int = (list.length - 1); i >= 0; i--)

    if (list[i] is myClass)
    
        trace("found", i);
        list.removeAt(i);
    

【讨论】:

好答案。 @seventeen,另外,如果您要从显示列表中删除该项目,请在 从数组中删除该项目之前这样做。您也可以只遍历显示列表本身 (getChildAt(i)) 并放弃 list 数组。 谢谢大家,这正是我所需要的。 PS,我每个类只有一个实例,所以按类名查找项目非常棒。

以上是关于Actionscript 3:当元素是对象/类实例时,识别要删除的数组元素的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3:预渲染类实例以提高性能

ActionScript 3 Lynda.com - AS3 - 使用循环生成类的实例

ActionScript 3 实例化一个对象并将其添加到显示列表并一次性给它一个名称

Actionscript 3 实例名称属性不起作用

从 ActionScript 数组中删除所有元素的最佳方法?

在 ActionScript 3.0 中生成敌人