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 Lynda.com - AS3 - 使用循环生成类的实例
ActionScript 3 实例化一个对象并将其添加到显示列表并一次性给它一个名称