创建一个polyfill替换字符串JavaScript的第n次出现
假设我们创建了一个polyfill函数removeStr(),该函数接受三个参数,即-
subStr→要删除哪个String
num→这是从字符串中删除subStr的第Number(num)次
如果成功从字符串中删除了subStr,则该函数应返回新值,否则在所有情况下均应返回-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。
然后使用滑动窗口算法记录字符串中subStr的出现次数(窗口大小等于subStr的长度)。
最初,我们从最左边的窗口开始,然后继续滑动窗口,直到窗口末尾到达原始字符串的末尾。
如果按照我们的方式,出现次数等于所需的出现次数,则从字符串中修剪该出现次数,然后返回由此获得的新字符串。
如果我们遍历整个字符串,则意味着字符串中没有足够的subStr出现,在这种情况下,我们应该返回-1并退出函数
最后,我们将removeStr属性添加到String.prototype,以便我们可以将其作为字符串函数来调用。