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

JavaScript로 문자열을 동일한 길이의 부분 문자열로 분할하는 방법

문제 소개

이번 글에서는 문자열숫자 n을 두 개의 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 여기서 n은 문자열의 길이를 정확히 나누어떨어지게 하는 값이어야 하며, 함수는 각각 동일한 길이를 가진 n개의 문자열로 이루어진 배열을 반환해야 합니다.

예를 들면 다음과 같습니다.

문자열이 "helloo"이고 숫자가 3이라면
출력 결과는 다음과 같습니다:
["ho", "eo", "ll"]

여기서 각 부분 문자열은 정확히 (문자열 길이 ÷ n)개의 문자를 포함합니다. 또한 각 부분 문자열은 원본 문자열의 앞쪽 문자와 뒤쪽 문자를 번갈아 가며 하나씩 가져와서 만들어집니다.

그럼 이 함수의 코드를 작성해 보겠습니다.

예제 코드

const str = 'helloo';
const splitEqual = (str, n) => {
    if(str.length % n !== 0){
        return false;
    }
    const len = str.length / n;
    const strArray = str.split("");
    const arr = [];
    let i = 0, char;
    while(strArray.length){
        if(i % 2 === 0){
            char = strArray.shift();
        }else{
            char = strArray.pop();
        };
        if(i % len === 0){
            arr[i / len] = char;
        }else{
            arr[Math.floor(i / len)] += char;
        };
        i++;
    };
    return arr;
};
console.log(splitEqual(str, 3));

실행 결과

코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

[ 'ho', 'eo', 'll' ]

코드 설명

동작 과정을 단계별로 살펴보면 다음과 같습니다.

1. 유효성 검사 — 먼저 str.length % n !== 0 조건을 통해 문자열 길이가 n으로 나누어떨어지는지 확인합니다. 나누어떨어지지 않으면 균등한 분할이 불가능하므로 false를 반환합니다.

2. 양방향 문자 추출 — 문자열을 split("")으로 문자 배열로 변환한 뒤, 반복문 안에서 shift()pop()을 번갈아 호출합니다. 짝수 인덱스에서는 배열의 맨 앞 문자를, 홀수 인덱스에서는 맨 뒤 문자를 꺼내어 "앞-뒤" 패턴을 만듭니다.

3. 결과 배열 구성i % len === 0일 때는 새로운 부분 문자열을 시작하고, 그렇지 않으면 Math.floor(i / len)로 해당 위치의 기존 요소에 문자를 이어 붙입니다. 모든 문자가 소진되면 완성된 배열을 반환합니다.

이처럼 shift()pop()의 특성을 활용하면 복잡한 인덱스 계산 없이도 문자열의 양 끝을 교차하며 순회하는 로직을 간결하게 구현할 수 있습니다.