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

JavaScript로 문자열 속 모든 숫자를 찾아 합계 구하기

문자열 안에 한 자리 숫자들이 여러 개 섞여 있을 때, 이 숫자들을 모두 골라내어 합계를 반환하는 JavaScript 함수를 작성해야 합니다.

해결 방법

가장 기본적인 접근 방식은 문자열을 한 글자씩 분리한 뒤, 각 글자가 숫자인지 확인하고 숫자라면 합산하는 것입니다.

예제 코드

const str = 'uyyudfgdfgf5jgdfj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3';

const sumNum = 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(sumNum(str));

실행 결과

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

35

코드 동작 원리

이 코드는 다음 단계로 동작합니다.

1. 문자열 분리: split("") 메서드를 사용해 문자열을 한 글자씩 나눈 배열로 변환합니다.

2. 숫자 판별: 단항 덧셈 연산자(+)를 이용해 각 글자를 숫자로 변환합니다. 알파벳이나 특수문자는 NaN이 되어 조건문에서 거짓(falsy)으로 처리되므로 자연스럽게 걸러집니다.

3. 합산: 유효한 숫자만 res 변수에 누적하여 최종 합계를 반환합니다.

정규표현식을 활용한 대안

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

const sumNum = str => {
    const digits = str.match(/\d/g) || [];
    return digits.reduce((sum, d) => sum + Number(d), 0);
};

console.log(sumNum('uyyudfgdfgf5jgdfj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3')); // 35

match(/\d/g)는 문자열에서 숫자(0~9)만 추출하여 배열로 반환하며, reduce를 통해 각 숫자를 누적 합산합니다. 이 방식은 가독성이 뛰어나고 반복 로직을 직접 작성할 필요가 없다는 장점이 있습니다.