2009-10-28 4 views
6

배열의 일부 요소를 삭제해야하지만 배열을 재정렬해야합니다.재 배열하지 않고 배열에서 요소를 삭제하는 가장 좋은 방법

"삭제"를 사용하여 요소를 삭제하면 "구멍"이 메모리를 차지합니까?

var array=["A","B","C"]; 
delete array[1]; // array -> ["A", undefined, "C"] 

삭제 된 요소가 실제로 삭제되어 메모리 공간을 차지하지 않는다고 생각하십니까?

답변

4

전체 구현에 따라 다릅니다. 내부적으로 모든 JS 표현은 결국 드문 드문 표현으로 변환되지만, 스파 스 표현은 요소 당 더 많은 메모리를 사용하고 비 스파 스 배열보다 액세스 속도가 느려집니다.

밀도가 높은 배열에서 한 값을 제거하면 메모리를 해제 할 수 없지만 충분한 요소 집합을 제거한 후에는 메모리를 전체적으로 절약하기 위해 구현이 희박한 표현으로 변환 될 가능성이 있습니다.

참고 : 삭제 한 색인의 개체 또는 값은 즉시 삭제되지 않습니다. 삭제는 개체에서 속성 슬롯을 제거하기 만합니다. 개체/값은 GC 통과 중에 만 제거됩니다. 다른 참고 문헌은 없습니다.

3

array.splice(1, 1); 사용할 수 있습니다. 인덱스 1에서 하나의 항목을 제거합니다. 첫 번째 매개 변수는 인덱스이고, 두 번째 매개 변수는 계수입니다.

+1

REARRANGE가 없으므로 splice는 내가 찾지 않는 것입니다. – blow

9

에 한번 사용

array.splice(index, 1); 

Mastering JavaScript Arrays를 참조하십시오.

+0

그것을 재배치하지 않으므로 splice는 내가 찾지 않는 것입니다. – blow

+3

배열이 스플 라이스로 재배치되지 않으면 인덱스가 완전히 제거됩니다. 배열에서 색인을 제거하지 않으시겠습니까? 그렇다면 해당 인덱스의 값을 null로 설정하면됩니다. – JoshNaro

관련 문제