2011-12-24 2 views
2

자바 스크립트에서 다차원 스파 스 배열에서 요소를 삭제하는 가장 휴대 가능한 방법은 무엇입니까?javascript의 다차원 배열에서 요소를 삭제하는 가장 휴대 가능한 방법은 무엇입니까?

때때로 행을 정의 할 수없는 경우 다음과 같이 잘 수행됩니까?

if(content[row]) { 
    delete content[row][col]; 
} 

이 방법이 효과적일까요?

if(r=content[row]) { 
    delete r[col]; 
} 
+2

나는이 질문에서 "휴대용"의 요점을 얻지 못한다. 그것은 baric javascript (dom과 상호 작용하지 않음)이다. 그것은 모든 곳에서 작동해야합니다. –

+0

이상적으로는 ...하지만 배열을 사용하더라도 모두가 표준을 따르는 것은 아닙니다. –

답변

7

이고, a는 배열

:

는 여기에 내가 일하고 있어요 내 GameAPI에서 발췌 한 것입니다. delete이 같은 요소가 있었다 배열에 빈 공간을 남겨 둘 것이다 :

var arr = [0, 1, 2, 3]; 
delete arr[1]; 
arr; // [0, undefined, 2, 3] 

가 배열에서 요소를 제거하려면 구멍을 떠나지 않고, 당신은 사용해야 splice() :

arr.splice(1, 1); // Start deleting at index 1, delete one element 
arr; // [0, 2, 3] 

모두의 귀하의 예제가 잘 작동 - content[row]가없는 경우 if 본문 평가되지 않습니다.

+0

나는 스플 라이스 (splice) 방법을 사용하여 속도 테스트를 수행했다. 수동으로 요소를 삭제하는 것보다 느리지 만 코드를 훨씬 간단하게 만들 수 있습니다. 편집 : 게다가 그것은 순서를 유지합니다. –

1

요소를 삭제할뿐만 아니라 배열 길이도 조정해야합니다.

일반적으로 배열의 마지막 요소 색인을 대체 된 요소로 설정하고, 마지막 요소를 삭제하고 길이를 감소시킵니다. 그것은 빠르지 만 배열의 구조를 유지하지는 않습니다. 나는 인덱스에 따라 다르다

removeAt : function(a, i) { 

    //Removes an element in array 

    if(!(a.length>i)) return false; 

    delete a[i]; 
    a[i] = a[a.length-1]; 
    delete a[a.length-1]; 
    a.length--; 

    return true; 
} 
+0

아니요, 길이를 조정할 필요가 없습니다. 그래서, 나는 길이에 할당 할 수 있니? – Dims

+0

치수를 확인해야합니까? 요소가 이미 삭제 된 경우 작업을 삭제하지 않습니까? – Dims

+0

예. 나는 브라우저가 배열 조작을 다루는 여러 가지 방법을 설명하는 기사를 찾고 있는데, 일관성이 없으며 길이를 예방책으로 변경한다. 최적화를 위해 길이를 확인합니다. –

관련 문제