3개의 인수, 즉 -
를 취하는 폴리필 함수 removeStr()을 생성했다고 가정해 보겠습니다.-
subStr → 제거할 문자열의 발생
-
num → 문자열에서 제거되는 subStr의 숫자(num)번째 발생입니다.
문자열에서 subStr이 성공적으로 제거되면 함수는 new를 반환해야 하고, 그렇지 않으면 모든 경우에 -1을 반환해야 합니다.
예를 들어 -
const str = 'drsfgdrrtdr';
console.log(str.removeStr('dr', 3)); 예상 출력 -
'drsfgdrrt'
이에 대한 코드를 작성해 보겠습니다 -
예시
const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function(subStr, num){
if(!this.includes(subStr)){
return -1;
}
let start = 0, end = subStr.length;
let occurences = 0;
for(; ;end < this.length){
if(this.substring(start, end) === subStr){
occurences++;
};
if(occurences === num){
return this.substring(0, start) + this.substring(end,
this.length);
};
end++;
start++;
}
return -1;
}
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num)); 출력
콘솔에서 이 코드의 출력은 -
입니다.drsfgrtdr
코드 이해하기 -
-
removeStr() 함수는 먼저 subStr이 한 번도 발생하지 않는지 확인하고 종료하고 -1을 반환해야 합니다.
-
그런 다음 슬라이딩 윈도우 알고리즘을 사용하여 subStrin 문자열(윈도우의 크기는 subStr의 길이와 동일함)의 발생 횟수를 기록합니다.
-
처음에는 맨 왼쪽 창에서 시작한 다음 ofwindow가 원래 문자열의 끝에 도달할 때까지 창을 계속 슬라이드합니다.
-
도중에 발생 횟수가 필요한 발생 횟수와 같으면 문자열에서 해당 발생을 잘라내고 이렇게 얻은 새 문자열을 반환합니다.
-
전체 문자열을 반복하는 경우 문자열에 subStr이 충분히 발생하지 않았으며 이 경우 -1을 반환하고 함수를 종료해야 함을 의미합니다.
마지막으로 string.prototype에 removeStr 속성을 추가하여 stringfunction으로 호출할 수 있도록 합니다.