javascript delete 연산자

프로그래밍|2012. 10. 29. 21:12

Array 배열에 있는 요소 중 특정 배열의 요소를 삭제하고 싶을 때에는 javascript의 delete 연산자를 사용하면 된다.

var numberArr = new Array();

numberArr.push("1");

numberArr.push("2");

numberArr.push("3");


delete numberArr[1];


for (var idx in numberArr) {

console.log(numberArr[idx]);

}


출력 결과


5년 넘게 개발을 해오면서 delete 연산자 오늘 처음 알게 되었다.

javascript를 너무 등한시하다 보니 모르는게 너무 많다는 것을 느낀다.

이젠 자바스크립트도 제대로 한번 공부해봐야 겠다.




delete 연산자를 사용하게 되면 문제가 있다.

alert(numberArr.length); 와 같이 배열의 사이즈를 확인해 보면 3이 노출된다.


이상한 것은 foreach를 이용하여 루프를 돌렸을 경우에는 삭제한 엘리먼트를 제외한 값이 찍히는 반면 다음과 같이 일반적인 루프를 이용하게 되면 삭제된 엘리먼트는 undefined 로 찍힌다.

for (var count = 0; count < numberArr.length; count++) {

    alert(numberArr[count]);

}


아무래도 foreach에서는 내부적으로 정의되어 있지 않은 값(undefined)에 대해서는 무시하는 기능이 있는 것 같다.

여하튼 delete 연산자를 이용하면 실제 배열의 엘리먼트를 지우는 것이 아닌 undefined로 바꾸는 것을 알 수 있다.


이 문제를 해결하기 위해서 splice 함수를 이용하였다.

myArray.splice(2,1); 와 같은 코드를 작성하면 첫 번째 인자의 배열 번호에서부터 두 번째 인자만큼 엘리먼트를 삭제해 준다.

예를 들어서 1, 2, 3, 4, 5 를 저장하고 있는 배열에 arr.splice(2,1) 와 같이 코드를 작성하게 되면 1, 2, 4, 5 라는 결과값을 얻을 수 있다.


그리고 splice함수는 내부적으로 새로운 배열을 생성하여 return해주기 때문에 정상적인 배열 사이즈를 얻을 수 있다.



댓글()