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

JavaScript에서 문자열을 균등한 부분으로 나누는 방법

JavaScript에서 문자열과 숫자 n(n은 문자열 전체 길이를 정확히 나눌 수 있는 값)을 입력받아, 해당 문자열을 n개의 동일한 길이의 조각으로 나눈 뒤 그 결과를 배열로 반환하는 함수를 작성해야 하는 경우가 있습니다. 예를 들어 길이가 48인 문자열을 6개 조각으로 나눈다면, 각 조각의 길이는 정확히 8자가 되어야 합니다.

예제 코드

다음은 reduce 메서드를 활용하여 문자열을 균등하게 분할하는 함수입니다.

const str = 'we will be splitting this string into parts';
const num = 6;
const divideEqual = (str, num) => {
    const len = str.length / num;
    const creds = str.split("").reduce((acc, val) => {
        let { res, currInd } = acc;
        if(!res[currInd] || res[currInd].length < len){
            res[currInd] = (res[currInd] || "") + val;
        }else{
            res[++currInd] = val;
        };
        return { res, currInd };
    }, {
        res: [],
        currInd: 0
    });
    return creds.res;
};
console.log(divideEqual(str, num));

코드 작동 원리

  • str.length / num을 계산하여 각 조각이 가져야 할 목표 길이(len)를 구합니다.
  • split("")으로 문자열을 한 글자씩 배열로 변환한 뒤, reduce로 각 문자를 순회합니다.
  • res는 최종 결과 배열을, currInd는 현재 채우고 있는 조각의 인덱스를 추적합니다.
  • 현재 조각의 길이가 목표 길이보다 짧으면 문자를 이어 붙이고, 목표 길이에 도달하면 인덱스를 하나 증가시켜 다음 조각을 채우기 시작합니다.

출력 결과

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

[ 'we will ', 'be split', 'ting thi', 's string', ' into pa', 'rts' ]

더 간단한 대안: substring 활용

substring 메서드를 사용하면 동일한 기능을 훨씬 간결하게 구현할 수 있습니다.

const divideEqual = (str, num) => {
    const len = str.length / num;
    return Array.from({ length: num }, (_, i) =>
        str.substring(i * len, (i + 1) * len)
    );
};
console.log(divideEqual(str, num));
// [ 'we will ', 'be split', 'ting thi', 's string', ' into pa', 'rts' ]

Array.from으로 num개의 요소를 가진 배열을 생성하고, 각 인덱스 i마다 시작 위치와 끝 위치를 계산해 substring으로 잘라내는 방식입니다. 가독성이 좋고 불필요한 문자 순회가 없어 성능 면에서도 유리하기 때문에, 실무에서는 이 방식을 사용하는 것이 권장됩니다.