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으로 호출할 수 있도록 합니다.