创建一个 polyfill 来替换字符串 JavaScript 的第 n 次出现

javascriptweb developmentobject oriented programming更新于 2025/9/25 15:08:17

假设,我们创建了一个 polyfill 函数 removeStr(),它接受三个参数,即 −

  • subStr — 需要删除的字符串的出现次数

  • num — 需要从字符串中删除的第 (num) 个 subStr 出现次数

如果成功从字符串中删除 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 的长度)。

  • 最初,我们从最左边的窗口开始,然后继续滑动窗口,直到窗口末尾到达原始字符串的末尾。

  • 如果按照我们的方法,出现次数等于所需的出现次数,我们从字符串中修剪该出现次数并返回由此获得的新字符串。

  • 如果我们遍历整个string,这意味着 string 中 subStr 的出现次数不够,在这种情况下我们应该返回 -1 并退出函数

最后,我们将 removeStr 属性添加到 String.prototype,以便我们可以将其作为字符串函数调用。


相关文章


有用资源