본문으로 바로가기

함수 안에서 forEach를 사용할 때 return문을 사용하여 함수를 종료시키고 싶은 상황이 있다.

그러나 forEach에서 return문은 continue로 작동된다. 즉 forEach에서 return문을 사용한다고 해서 함수가 종료되지 않는다. 따라서 반복문 중간에 함수를 종료시키고 싶은 상황이 있다면 for문과 같은 다른 반복 루프를 사용하는 것이 좋다.

 

아래는 내가 겪었던 상황이다.


const onClickFile = (name, path, code, extension) => {
        //같은 파일 있는지 검사
        files.forEach(function(file){
            if(file["path"] === path){
                setSelectIdx(i);
                return;
            }
        })

	//파일 객체 삽입
        //...
        
    }

위 코드는 파일 객체들이 있는 배열을 순회하며 path가 기존 파일 객체의 path와 일치한지 검사하는 코드이다.

같은 기존 파일 객체의 path와 path가 일치하는 경우 return 키워드를 사용하여 함수를 종료 시키고자 했다.

그러나 파일 객체의 path와 path가 일치하는 경우에도 함수가 종료되지 않고 그 뒤의 코드인 파일 객체를 삽입하는 코드가 그대로 실행된다.

 


const onClickFile = (name, path, code, extension) => {
    //같은 파일 있는지 검사
    for(var i = 0; i < files.length; i++ ){
        if(files[i]["path"] === path){
            setSelectIdx(i);
            return;
        }
    }

    //파일 객체 삽입
    //...
        
    }

forEach문을 for문으로 변경하여 기존 파일 객체의 path와 path가 일치하는 경우 return 키워드를 사용하여 함수가 종료하도록 만들었다.