문자열의 위치를 인덱싱 하여 문자열을 바꿔주고 싶었는데 실패했다. 왜냐하면 문자열은 불변(immutable) 했기 때문이다. 왜그런지 살펴봤다. 만일 기존의 문자열을 직접 변경할 수 있다면 발생하는 문제점들이 있을것이다.
2. forEach 사용법을 익혔다.
함수 안에 배열 메소드중 하나인 forEach를 사용하여 문제를 풀었다. forEach는 배열의 각 요소에 대해 주어진 함수를 실행하는 메소드다. 괄호 안에 화살표 함수를 넣어서 위와 같이도 활용할 수 있었다. 현재 값, 인덱스, 배열(현재 호출된 배열) 세가지 인수를 받을 수 있다.
function sumDigits(n){
//자연수 n을 문자열로 만든다.
let strN = String(n);
//문자열을 분리해서 배열로 만든다.
let arrN = strN.split('');
//배열의 각 요소를 숫자로 변환
let numArr = arrN.map(Number);
//배열의 숫자를 모두 더한다
var sum = numArr.reduce((sum, digit) => sum + digit, 0)
return sum;
메소드를 공부할 방법이 없었고 자릿수를 더하는 문제가 낭로때마다, 해당 값을 문자로 바꿔 인덱싱 하여 더하는 방법을 사용했었다. 이번에는 메소드를 사용해보고 싶어 다른 방법을 알아보았다.
문자열을 배열로 분리하는 방법인 split('')을 사용해볼 수 있었고,
map이 실제로 어디서 쓰이나 궁금했는데, 배열의 각 원소들을 숫자로 바꿀 때 사용할 수 있다는 점을 알 수 있었다.
또한 reduce의 쓰임에 대해서 다시 한번 정확히 알 수 있었다.
reduce 메소드
- reduce 메소드는 배열의 각 요소에 대해 함수를 실행하여 단일 결과 값(누적 값)을 생성한다. 주로 배열의 값을 합하거나 하나의 객체로 합칠때 사용한다. 근데 여기서 이상한 점이 있다. 배열의 각 요소에 대해 함수를 실행한다는 내용이 forEach와 굉장히 유사하다. 무슨 차이점이 있을까?
forEach : 반환값이 없는 메소드
- 목적 : 배열의 각 요소에 대해 특정 작업을 수행하기 위해 사용.
- 중요성 : 배열의 요소를 순회하며 작업을 수행할 뿐, 그 결과를 추적하지 않는다.
reduce 메소드: 반환값이 있는 메소드
- 목적 : 배열의 요소를 하나의 값으로 누적하여 결합하기 위해 사용된다.
- 중요성 : reduce 는 배열의 요소를 결합하여 최종 결과를 도출해야 하므로, 누적 값이 반환되어야 한다. 이 반환값은 다른 곳에서도 활용할 수 있다는 차이점이 있다.
이를 잘 이해하기 위해서 reduce의 기능과 매개변수를 자세히 보자
매개변수는 첫번째 매개변수로 forEach과 같이 콜백함수를 매개변수로 받는다. 두번째 매개변수는 초깃값을 받는다. 아래 예시 코드를 보자.