2017-12-11 9 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을 하나씩 증가하므로 index [0]을 다시 확인하지 않을 것입니다. 따라서 제거하려는 하나 이상의 객체를 건너 뛸 수 있습니다.

대신이 문제를 해결해야하는 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

추신 : 각 클래스의 인스턴스가 하나뿐이므로 클래스 이름별로 항목을 찾는 것이 좋습니다. – seventeen

관련 문제