javascript delete 연산자
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해주기 때문에 정상적인 배열 사이즈를 얻을 수 있다.
'프로그래밍' 카테고리의 다른 글
jquery checkbox 전체 선택, 전체 해제, 체크 값 추출 (6) | 2012.11.05 |
---|---|
jquery selector 실습 (1) | 2012.11.02 |
javascript Array객체에 contains 메서드 추가 (2) | 2012.11.02 |
대입연산자 잘못 쓰면 이렇게 된다. (0) | 2012.11.01 |
javascript foreach 사용 방법 (1) | 2012.10.29 |
spring 2.5 not supported by MultipartResolver 발생 시 해결 방법 (0) | 2012.10.26 |
java generic에서 E와 T 차이 (5) | 2012.10.24 |
getter, setter 자동 생성 라이브러리 lombok (0) | 2012.10.23 |