문제 상황
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(' ')과 동일하게 단어별로 분리된 배열을 얻을 수 있습니다.