[코테][JS] forEach()와 전개연산자... 그게 뭘까?

star_delight.yeji·2023년 4월 27일
post-thumbnail

문자열 정수의 합

오류발생....
숫자가 입력된 문자열의 값 하나하나를 더하여 결과값을 출력하는 문제를 풀다 이상한 점을 발견했다. "123456789"는 숫자가 들어 있는 문자열이다. 문자열을 하나씩 forEach문으로 돌아가며 값을 더하여 값을 return하는 코드로 작성했다.

function solution(num_str) {
    var answer = 0;
    num_str.forEach((item)=>
        answer += Number(item)
    ) 
    return answer
}

결과는 Uncaught TypeError: num_str.forEach is not a function at solution (<anonymous>:2:20) at <anonymous>:1:1 s라는 오류가 발생했다. 발생한 오류는 forEach가 함수가 아니라는 오류이다.
발생 원인은 코드가 forEach()배열 또는 배열과 유사한 객체가 아닌 값에 대해 메서드를 호출하려고 시도할 때 발생하는 오류이다. 그래서 입력한 값의 type을 알아보았다.

my_str = "123456789"
typeof(my_str) // string

forEach()은 object인 경우에 사용이 가능하는데 그걸 놓치고 있었다....

그럼 배열을 object로 바꾸기 위해서는 어떻게 해야될까?

my_str = "123456789"
typeof([...my_str]) // object

바로 전개 연산자를 사용하는 것이다. 전개 연산자를 통해 함수의 인자값으로 배열의 원소를 사용하여 계산하는 코드를 작성했다.

function solution(num_str) {
    var answer = 0;
    [...num_str].forEach((item)=>
        answer += Number(item)
    ) 
    return answer
}

전개 연산자로 바꾸고 제출하니 통과!!!


오류가 발생한 원인
Object인 경우에 forEach()문을 사용해야 하는데 String일 때 사용했다...

그래서 어떻게 고쳤을까?
String을 전개 연산자를 사용해서 Object로 변경하기!

0개의 댓글