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

자바스크립트 재귀 함수로 문자열에서 알파벳만 추출하는 방법

이번 글에서는 알파벳과 숫자가 섞여 있는 문자열을 입력받아, 알파벳으로만 구성된 새로운 문자열을 반환하는 재귀 함수를 작성해 보겠습니다. 함수 이름은 pickString이라고 하겠습니다.

문제 이해하기

예를 들어 다음과 같은 문자열이 주어졌다고 가정해 봅시다.

입력: 'dis122344as65t34er'
출력: 'disaster'

즉, 문자열을 한 글자씩 순회하면서 숫자는 제거하고 알파벳(그리고 공백)만 결과 문자열에 이어 붙이면 됩니다. 반복문 대신 재귀 호출을 활용해 이 문제를 해결할 수 있습니다.

구현 코드

재귀 함수의 핵심은 세 가지입니다.

  • 현재 위치의 문자 확인: 해당 문자가 숫자인지 판별합니다.
  • 숫자라면 건너뛰기: 빈 문자열을 더해 다음 인덱스로 넘어갑니다.
  • 종료 조건: 인덱스가 문자열 길이에 도달하면 지금까지 누적된 결과를 반환합니다.
const str = 'ex3454am65p43le';

const pickString = (str, len = 0, res = '') => {
  if(len < str.length){
    // parseInt로 변환했을 때 유효한 숫자가 나오면 제외, 아니면 그대로 유지
    const char = parseInt(str[len], 10) ? '' : str[len];
    return pickString(str, len + 1, res + char);
  }
  return res;
};

console.log(pickString(str));
console.log(pickString('23123ca43n y43ou54 6do884 i43t'));
console.log(pickString('h432e54l43l65646o'));
console.log(pickString('t543h54is 54i5s 54t43he l543as53t 54ex87a455m54p45le'));

코드 동작 원리

parseInt(str[len], 10)는 현재 문자를 10진수 정수로 변환을 시도합니다. 만약 현재 문자가 숫자라면 유효한 값이 반환되어 참(truthy)이 되고, 삼항 연산자에 의해 빈 문자열 ''이 선택됩니다. 반대로 알파벳이나 공백이라면 NaN이 반환되어 거짓(falsy)이 되므로, 원래 문자가 그대로 결과에 누적됩니다.

매 호출마다 인덱스 len을 1씩 증가시키며 자기 자신을 다시 호출하므로, 별도의 반복문 없이도 전체 문자열을 순회할 수 있습니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

example
can you do it
hello
this is the last example

마무리

이처럼 재귀 함수를 사용하면 반복문 없이도 문자열을 손쉽게 필터링할 수 있습니다. 다만 문자열이 매우 긴 경우에는 호출 스택 깊이가 깊어질 수 있으므로, 실제 서비스 환경에서는 입력 크기를 고려해 반복문 기반 구현과 함께 비교 검토하는 것이 좋습니다.