문제 소개
숫자(number) 타입의 정수와 문자열(string) 형태로 표현된 정수가 섞여 있는 배열을 입력받아 처리하는 JavaScript 함수를 작성해야 합니다.
함수가 수행해야 할 작업은 다음과 같습니다.
- 문자열로 표현된 정수들은 모두 더합니다.
- 숫자 타입인 정수들의 총합을 구한 뒤, 여기서 문자열 정수의 합을 뺍니다.
즉, 최종 결과는 (숫자 타입 요소의 합) − (문자열 숫자 요소의 합)이 됩니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다.
const arr = [5, 2, '4', '7', '4', 2, 7, 9];
const integerDifference = (arr = []) => {
let res = 0;
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(typeof el === 'number'){
res += el;
}else if(typeof el === 'string' && +el){
res -= (+el);
};
};
return res;
};
console.log(integerDifference(arr));
코드 동작 원리
코드의 흐름을 단계별로 살펴보겠습니다.
- 결과값을 저장할 변수
res를 0으로 초기화합니다. for반복문을 사용해 배열의 각 요소를 하나씩 순회합니다.typeof연산자로 요소의 데이터 타입을 검사합니다. 요소가 number 타입이라면res에 해당 값을 더합니다.- 요소가 string 타입이면서 단항 덧셈 연산자(
+el)를 통해 유효한 숫자로 변환되는 경우라면, 변환한 값을res에서 뺍니다. - 모든 요소의 순회가 끝나면 최종 결과값을 반환합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
10
결과 검증
배열 [5, 2, '4', '7', '4', 2, 7, 9]를 기준으로 직접 계산해 보면 다음과 같습니다.
- 숫자 타입 요소의 합: 5 + 2 + 2 + 7 + 9 = 25
- 문자열 숫자 요소의 합: 4 + 7 + 4 = 15
- 최종 결과: 25 − 15 = 10
이처럼 typeof를 활용한 타입 검사와 단항 덧셈 연산자를 이용한 문자열→숫자 변환만으로도, 혼합 배열 안에서 숫자와 문자열 숫자를 손쉽게 구분하여 처리할 수 있습니다.