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

JavaScript로 문자를 알파벳 위치 번호로 변환하는 방법

이번 글에서는 문자열을 입력받아 공백을 제거하고 소문자로 변환한 뒤, 각 문자에 해당하는 영어 알파벳의 위치 번호를 담은 배열을 반환하는 함수를 작성해 보겠습니다. 이때 문자열 안에 포함된 공백이나 특수문자는 무시해야 합니다.

예시

예를 들어 다음과 같이 동작합니다.

입력 → 'Hello world!'
출력 → [8, 5, 12, 12, 15, 23, 15, 18, 12, 4]

'Hello world!'라는 문자열에서 각 알파벳이 알파벳 순서상 몇 번째 위치에 있는지 계산한 결과입니다. 'H'는 8번째, 'e'는 5번째, 'l'은 12번째인 식으로 매핑되며, 느낌표(!)와 공백은 결과에서 제외됩니다.

구현 코드

이를 구현한 코드는 다음과 같습니다.

const str = 'Hello world!';
const mapString = (str) => {
    const mappedArray = [];
    str
    .trim()
    .toLowerCase()
    .split("")
    .forEach(char => {
        const ascii = char.charCodeAt();
        if(ascii >= 97 && ascii <= 122){
            mappedArray.push(ascii - 96);
        };
    });
    return mappedArray;
};
console.log(mapString(str));

코드 설명

위 코드의 동작 원리를 단계별로 살펴보겠습니다.

1. trim()과 toLowerCase() — 먼저 trim() 메서드로 문자열 양 끝의 불필요한 공백을 제거하고, toLowerCase()로 모든 문자를 소문자로 변환합니다. 대소문자를 통일하면 아스키 코드 값 비교가 단순해집니다.

2. split("") — 빈 문자열을 구분자로 사용해 문자열을 한 글자씩 쪼개어 배열로 만듭니다.

3. charCodeAt() — 각 문자의 아스키 코드 값을 구합니다. 영어 소문자 'a'부터 'z'까지의 아스키 코드는 각각 97부터 122입니다.

4. 필터링 로직 — 아스키 코드가 97 이상 122 이하인 경우, 즉 알파벳 소문자인 경우에만 ascii - 96을 계산해 배열에 추가합니다. 'a'(97)에서 96을 빼면 1이 되므로, 정확히 알파벳 순번이 됩니다. 공백이나 특수문자는 이 조건을 통과하지 못해 자동으로 걸러집니다.

실행 결과

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

[
    8, 5, 12, 12, 15,
    23, 15, 18, 12, 4
]

이처럼 아스키 코드 값을 활용하면 별도의 알파벳 매핑 테이블 없이도 간결하게 문자-숫자 변환 로직을 구현할 수 있습니다. 참고로 대문자('A'~'Z', 아스키 코드 65~90)도 함께 처리하고 싶다면 조건문에 해당 범위를 추가하고, 코드 값에서 64를 빼주면 됩니다.