[Javascript] 반복문과 Array.pop() , shift() 시 주의점

Javascript로 만드는 간단한 프로그램 작성중에 당혹스럽게 만들었던 부분이 있어 공유합니다.

Java에서 사용할때는 전혀 생각지도 않았던 것이 문제가 발생되네요..

지금 생각해보면 Java에서는 ConcurrentModificationException이 발생되었었네요.

일단 아래의 코드를 보겠습니다.

    function test() {
        var array = ["1", "2", "3", "4", "5"];
        console.log("===========Index를 활용한 반복문==========")
        for(var i=0; i<array.length; i++) {
            console.log(array[i]);
        }


        console.log("===========Array.pop() 을 사용한 반복분============");
        array = ["1", "2", "3", "4", "5"];
        for(var i=0; i<array.length; i++) {
            console.log(array.pop());
        }

        console.log("==========선언부분에 길이 설정=============");
        array = ["1", "2", "3", "4", "5"];
        for(var i= 0, len=array.length; i<len; i++) {
            console.log(array.pop());
        }


        console.log("===========Enhanced For 반복문에 Array.pop() 사용=============");
        array = ["1", "2", "3", "4", "5"];
        for(var i in array) {
            console.log(array.pop());
        }
        console.log("==========================================")
    }

코드는 설명 부분이 필요 없을 정도로 간단합니다.

단지 차이가 있다면 선언부에 길이를 설정하는가 아니면 Java에서 말하는 Enhanced for를 사용해서 처리하느냐의 문제 입니다.

위의 코드를 실행하면 아래와 같은 결과를 얻습니다.

"===========Index를 활용한 반복문=========="
"1"
"2"
"3"
"4"
"5"
"===========Array.pop() 을 사용한 반복분============"
"5"
"4"
"3"
"==========선언부분에 길이 설정============="
"5"
"4"
"3"
"2"
"1"
"===========Enhanced For 반복문에 Array.pop() 사용============="
"5"
"4"
"3"
"=========================================="

정리하면 pop() 이나 shift() 를 사용하게 되면 배열에서 해당 정보가 빠지기 때문에 원하는 만큼 반복문이 실행되지 않습니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중