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

JavaScript에서 대소문자 혼합 문자열을 소문자로 변환하는 방법

문제 상황

JavaScript로 convertToLower() 함수를 작성해야 합니다. 이 함수는 문자열 메서드로 동작하며, 호출된 문자열 내의 모든 대문자를 소문자로 변환한 새로운 문자열을 반환합니다.

예를 들어, 함수에 다음과 같은 입력이 주어졌을 때:

입력

const str = 'ABcD123';

함수는 아래와 같은 결과를 반환해야 합니다.

출력

const output = 'abcd123';

동작 원리

이 문제는 toLowerCase() 같은 내장 메서드를 사용하지 않고 직접 구현하는 것이 핵심입니다. ASCII 코드의 특성을 활용하면 간단하게 해결할 수 있습니다.

ASCII 코드표에서 영어 대문자 A~Z는 65~90번, 소문자 a~z는 97~122번에 해당합니다. 즉, 대문자와 소문자 사이에는 정확히 32만큼의 차이가 존재합니다. 따라서 문자의 charCode가 65 이상 90 이하라면 대문자이므로, 여기에 32를 더한 값으로 새로운 문자를 만들면 소문자로 변환됩니다.

구현 예제

다음은 위 원리를 적용한 전체 코드입니다.

const str = 'ABcD123';

String.prototype.convertToLower = function(){
    let res = '';
    for(let i = 0; i < this.length; i++){
        const el = this[i];
        const code = el.charCodeAt(0);
        // ASCII 코드 기준으로 대문자(A~Z)인지 확인
        if(code >= 65 && code <= 90){
            // 대문자라면 32를 더해 소문자로 변환
            res += String.fromCharCode(code + 32);
        }else{
            // 그 외의 문자(숫자, 특수문자 등)는 그대로 유지
            res += el;
        }
    }
    return res;
};

console.log(str.convertToLower());

실행 결과

abcd123

코드 설명

코드의 핵심 흐름은 다음과 같습니다.

1. String.prototypeconvertToLower 메서드를 추가하여 모든 문자열에서 사용할 수 있도록 합니다.
2. 반복문으로 문자열의 각 문자를 하나씩 순회하며 charCodeAt(0)으로 ASCII 코드 값을 얻습니다.
3. 코드 값이 65~90 범위(대문자)에 속하면 String.fromCharCode(code + 32)로 소문자를 생성하고, 그렇지 않으면 원래 문자를 그대로 누적합니다.
4. 최종적으로 변환된 문자열을 반환합니다.

숫자나 특수문자는 대문자 범위에 해당하지 않으므로 변경 없이 그대로 출력되며, 결과적으로 알파벳 대문자만 소문자로 바뀐 문자열을 얻을 수 있습니다.