2012-01-24 5 views
3

나는 다음과 같은 배열이 있습니다자바 스크립트 : 삭제보다 더 나은 솔루션

var example = [ 
    1: function() { /* goodbye */ } 
]; 

delete보다 더 나은 솔루션이 있습니까 : 나는 delete example[0]; 사용하여 다음과 같은 결과 왼쪽하고

var example = [ 
    function() { /* hello */ }, 
    function() { /* goodbye */ } 
]; 

를? 아니면 배열의 색인을 수정하는 간단한 방법이 있습니까? (제 처분을받을 수 있습니다)

: 예제 배열이 수정되었습니다. 예를 들어 인덱스가있었습니다.

example.splice(0, 1); 

을하지만 examples 객체가 실제로 있다면, 당신은 delete를 사용하여 모든 속성을 반복하고 "이름 변경"해야 할 것 : example

답변

7

delete 대신, 배열, 당신은 .splice[MDN]을 사용할 수 있습니다 그들. 아마 배열을 사용하는 것이 더 쉽지만.

이 결과를 delete으로 가져 오는 이유는 기본 개체에서 '0' 속성을 제거하고 속성이 '1' 인 경우입니다. 당신은 기본적으로 낮은 수준에서 작동하고 있습니다.

인덱스의 갭이있는 또 다른 문제점은 array.length이 항상 배열의 실제 값 수가 아닌 가장 높은 인덱스 + 1을 반환한다는 것입니다. 따라서 요소를 삭제 한 후에 example.length은 여전히 ​​2이됩니다.

+1

'[] .shift()는'잘 작동한다. 대신 배열의 끝에서 그것을 삭제하고 싶다면'[] .pop()'와 같이. –

+0

이것은 내가 찾던 바로 그 것이다. 고마워. –

1

배열을 정의하는 방법이 잘못되었습니다. 이 그 수행 방법은 다음과 같습니다

var example = [ 
    function() { /* hello */ }, 
    function() { /* goodbye */ } 
]; 

첫 번째 요소를 제거하기 위해 변화를 사용할 수 있습니다

var firstElement = example.shift(); 
0

당신은 사용자 지정 정렬 기능을 사용할 수 있습니다

array.sort(sortfunction) 

function sortfunction(a, b){ 
    // check indexes here 
} 
0

을 그냥 이동할 수를 첫 번째 요소.

http://jsfiddle.net/4zW7B/1/

var example = [ 
    function() { alert('hello'); }, 
    function() { alert('goodbye'); } 
]; 
example[0](); 
example.shift(); 
example[0](); 
관련 문제