공식 String.prototype.split() 메서드에는 문자열을 인덱스 1 또는 임의의 인덱스 n부터 분할하는 기능이 기본적으로 제공되지 않습니다. 하지만 split()을 사용하는 방식을 조금만 응용하면 원하는 동작을 충분히 구현할 수 있습니다.
접근 방법
핵심 아이디어는 두 개의 배열을 만드는 것입니다.
- ACTUAL 배열: 문자열 전체(0부터 끝까지)를 분할한 결과
- LEFTOVER 배열: 시작 위치(STARTPOSITION)까지 0부터 분할한 결과
이후 LEFTOVER 배열의 각 요소를 순회하면서 ACTUAL 배열에서 해당 요소를 제거(splice)합니다. 그러면 ACTUAL 배열은 사실상 STARTINDEX부터 끝까지 분할된 것과 같은 결과를 갖게 됩니다.
예제 코드
const string = 'The quick brown fox jumped over the wall';
const returnSplittedArray = (str, startPosition, seperator=" ") => {
const leftOver = str.split(seperator, startPosition);
const actual = str.split(seperator);
leftOver.forEach(left => {
actual.splice(actual.indexOf(left), 1);
})
return actual;
}
console.log(returnSplittedArray(string, 5, " "));실행 결과
["over", "the", "wall"]
위 예제에서는 공백(" ")을 구분자로 사용하고, 시작 위치를 5로 지정했습니다. 따라서 앞의 다섯 단어("The", "quick", "brown", "fox", "jumped")가 제거되고, 여섯 번째 단어부터 나머지 단어들만 배열로 반환됩니다.
이 방식은 split()의 두 번째 인자(limit)를 활용해 앞부분을 잘라내고, 이를 원본 배열에서 제거하는 간단한 트릭으로 특정 인덱스부터 분할하는 효과를 얻습니다. 다만 중복된 단어가 있을 경우 indexOf가 첫 번째 일치 항목을 찾기 때문에 의도와 다른 요소가 제거될 수 있다는 점은 유의해야 합니다.