2017-12-11 6 views
2

私はオブジェクトの配列を持ちますが、そのうちのいくつかはムービークリップといくつかのクラスのインスタンスです。配列から項目を削除する必要がありますが、どの配列インデックスを削除するのが最適かを判断するのには苦労しています。Actionscript 3:要素がオブジェクト/クラスインスタンスであるときに削除する配列要素を特定します。

私は現在、私はより良い方法は、オブジェクト名を取得し、配列をループせずにするために存在している必要があります考えています

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

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

        } 

に動作している、このコードを使用しています。

+1

は、あなたが「一歩にあなたの検索コードを減らす代わりに、あなたのような配列をループすることができます:ここで

は、これらの提言の両方が一緒に次のようになりますやっている。もちろん、配列に取り込むコードをいくつか変更する必要があります。あなたの要求に応じて、それは実際的かもしれないし、そうでないかもしれません。 – Brian

答えて

3

削除する必要があるオブジェクトをどのように識別したいかについて、少し明確に説明できます。 myClassクラスのインスタンスであるオブジェクトを単に削除する場合は、isというキーワードをおすすめします。

また、繰り返している間にリストからアイテムを削除すると警告が表示され、問題が発生することがあります。 index [0]でオブジェクトを削除すると、index [1]にあるオブジェクトは現在index [0]になりますが、forループは各繰り返しの最後にiを1つ増やすため、index [0]を再度確認することはありません。したがって、削除したいオブジェクトの1つまたは複数をスキップすることができます。

代わりに、この問題を解決する必要があるbackwards--を反復処理してみてください。あなたは辞書への配列から変更することができた場合

for (var i:int = (list.length - 1); i >= 0; i--) 
{ 
    if (list[i] is myClass) 
    { 
     trace("found", i); 
     list.removeAt(i); 
    } 
} 
+2

良い答え。 @seventeenまた、表示リストから項目を削除する場合は、項目を配列から削除する前に* *削除してください。また、表示リスト自体( 'getChildAt(i)')を繰り返して、 'list'配列を省略することもできます。 – BadFeelingAboutThis

+0

皆、ありがとうございました。 – seventeen

+0

PS、各クラスのインスタンスが1つしかないので、クラス名でアイテムを検索するのはすばらしいです。 – seventeen

関連する問題