查找数组中的对象(AS3)

时间:2012-01-17 09:19:00

标签: flash actionscript-3 actionscript flash-cs5.5

所以这就是我在伪代码中要做的事情:

array = new Array();
thisObj = new objectTypeOne();
thisObj2 = new objectTypeTwo();
array.push(thisObj);
array.push(thisObj2);

for( i=0; i<=array.length, i++)
{ 
  if( array[i] == objectTypeOne() )
  {
    //do code
  }
 }

我知道每个对象类型可以有两个不同的数组,但这会破坏我的其他许多代码,这些代码假设它们都在同一个数组中。 (他们是实际相同的对象,有轻微但重要的差异,我想我应该真的有objectTypeTwo派生自其他人,但目前这无关紧要。)

2 个答案:

答案 0 :(得分:1)

我相信你所寻找的是:

if(array[i] is MyObjectType) {
   //I found an instance of MyObjectType
}

运算符“is”执行运行时类型分析,如果您正在测试的对象(在此示例中为array[i])直接与您要比较的类型或者子类(在此示例中为MyObjectType)。您可能还想使用typeof进行调查。但是,尽量避免像这样调用TON或使用“typeof”调用...在运行时查找类型信息在任何语言中都是昂贵的。

答案 1 :(得分:1)

首先将此i<=array.length更正为i<array.length。这就是“术语未定义”错误的原因。

@Ascension Systems建议的解决方案可以在创建不同类的实例时使用,例如

array = new Array();
thisObj = new Student();
thisObj2 = new Employee();
array.push(thisObj);
array.push(thisObj2);

然后你可以检查

for( i=0; i<array.length, i++)
{ 
  if( array[i] is Student )
  {
    //do code
  }else if(array[i] is Employee){

  }
}

如果您使用自定义对象,请执行此操作

array = new Array();
thisObj = new Object();
thisObj.type = "type1";
....
....
thisObj2 = new Object();
thisObj2.type = "type2";
...
...
array.push(thisObj);
array.push(thisObj2);

for( i=0; i<array.length, i++)
{ 
  if( array[i].type == "type1" )
  {
    //do code
  }else if( array[i].type == "type2"){

  }
}