Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열 속 숫자 합계 구하기

문제 개요

문자열 사이사이에 섞여 있는 한 자리 숫자들을 모두 찾아 그 합계를 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.

const str = 'gdf5jhhj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3';

이 문자열에는 5, 3, 4, 3, 4, 3, 5, 5, 3이 포함되어 있으며, 이 숫자들을 모두 더하면 35가 됩니다.

구현 예제

이 문제를 해결하는 코드는 다음과 같습니다.

const str = 'gdf5jhhj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3';
const sumStringNum = str => {
    const strArr = str.split("");
    let res = 0;
    for(let i = 0; i < strArr.length; i++){
        if(+strArr[i]){
            res += +strArr[i];
        };
    };
    return res;
};
console.log(sumStringNum(str));

코드 설명

  • split("") 메서드를 사용해 문자열을 한 글자씩 나눈 배열로 변환합니다.
  • 단항 더하기(+) 연산자를 적용해 각 문자를 숫자로 변환합니다.
  • 알파벳 등 숫자가 아닌 문자는 NaN으로 변환되어 조건문에서 거짓으로 평가되므로 자연스럽게 걸러집니다.
  • 숫자로 판별된 경우에만 결과 변수에 더해 최종 합계를 계산합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

35

대안 방법: 정규표현식 활용

정규표현식과 reduce 메서드를 조합하면 더욱 간결하게 표현할 수 있습니다.

const sumWithRegex = str =>
  (str.match(/\d/g) || []).reduce((sum, num) => sum + Number(num), 0);

console.log(sumWithRegex(str)); // 35

match(/\d/g)는 문자열에서 모든 숫자만 추출한 배열을 반환하며, 이후 reduce로 각 숫자를 누적해 합계를 구합니다. 반복문 없이 함수형 스타일로 처리할 수 있어 가독성이 뛰어납니다.