原生JS实现replaceAll()函数

概述

js的replace()的第一个参数可以是字符串,也可以是正则,当是字符串的时候,只能替换一个,不能全局,那怎么实现replaceAll的效果呢?

当时面试的时候,有一个手撕代码题,题目是:在第一个字符串中找到第二个字符串,然后替换成第三个字符串,而且不能用任何api,不能使用正则表达式,只能用简单的基本语法。其实就是让你原生写一个replaceAll(),并自己写部分的api


// 这是我的写法,面试官仍有点不满的感觉,他说用两个for循环,一个个去检测,其实下面的做法也是类似的复杂度
// 有同学有关于js版本更好的做法,请在下方留言,大家一起学习学习
function subString (str, i, j) {
  let result = ''
  for (i; i < j; i++) {
    result += str[i]
  }
  return result
}

function replaceAll(str, before, after) {
  if (before.length > str.length) {
    return str
  }
  let searchLength = before.length
  let result = ''
  for (let i = 0; i < str.length; i++) {
    // 匹配到第一个字符
    if (str[i] === before[0]) {
      // 看before长度是否长于剩下的长度
      if (i > str.length - before.length) {
        break
      // 足够长
      } else {
        let compareStr = subString(str, i, i + searchLength)
        if (compareStr === before) {
          let front = subString(str, 0, i)
          let end = subString(str, i + searchLength, str.length - 1)
          str = front + after + end
        }
      }
    }
  }
  return str
}

你可能感兴趣的:(原生JS函数)