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

JavaScript에서 String.prototype.split()을 직접 구현하는 사용자 정의 함수 만들기


문제 상황

JavaScript의 String 클래스 프로토타입 객체에 새로운 메서드를 추가하는 함수를 작성해야 합니다.

이 함수는 문자열 구분자(separator) 하나만 인수로 받습니다(원본 split() 함수는 두 개의 인수를 받지만, 여기서는 간소화된 형태로 구현합니다). 그리고 전달받은 구분자를 기준으로 문자열을 분할한 결과 조각들을 배열 형태로 반환해야 합니다.

구현 예시

다음은 해당 기능을 구현한 코드입니다.

const str = 'this is some string';
String.prototype.customSplit = (sep = '') => {
    const res = [];
    let temp = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(el === sep || sep === '' && temp){
            res.push(temp);
            temp = '';
        };
        if(el !== sep){
            temp += el;
        }
    };
    if(temp){
        res.push(temp);
        temp = '';
    };
    return res;
};
console.log(str.customSplit(' '));

동작 원리

이 함수는 다음과 같은 순서로 동작합니다.

1. 결과를 담을 빈 배열 res와 임시 문자열 temp를 준비합니다.
2. 문자열을 한 글자씩 순회하면서 현재 문자가 구분자와 일치하면, 지금까지 누적된 temp를 배열에 추가하고 초기화합니다.
3. 구분자가 빈 문자열('')이면 모든 문자를 개별 요소로 분리합니다.
4. 반복이 끝난 후 마지막에 남아 있는 temp가 있다면 배열에 추가합니다.
5. 완성된 배열을 반환합니다.

출력 결과

[ 'this', 'is', 'some', 'string' ]

위와 같이 공백을 구분자로 전달하면 원래의 split(' ')과 동일하게 단어별로 분리된 배열을 얻을 수 있습니다.