实现常见的字符串方法(一)

109 阅读2分钟

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战 今天来介绍CSS中选择器、样式优先级、元素居中方案等。

今天主要来实现创建的字符串方法,如trim()反转字符串startsWith()等,看看他们是怎么实现的。

trim

trim()用来从指定string字符串中移除前面和后面的空格。那我们有哪些方法来实现呢? 在实现这个函数之前,我们先来写几个测试用例,从用例出发,来考虑我们应该实现怎么样的trim()方法。

测试用例

console.log(' '._trim().length); // 0
console.log(' abc'._trim().length);
console.log('abc '._trim().length);
console.log(' abc '._trim().length); // 3
console.log('a b c'._trim().length);
console.log(' a b c '._trim().length); // 5

第一种方法

我们先用正则表达式来实现它,第一步就是正则匹配到空白字符,第二步替换成''

var reTrim = /^\s+|\s+$/g;

String.prototype._trim = function() {
       return this.replace(reTrim, '');
}

第二种方法

我们来遍历他,用两个指针,从前遍历到第一个非空白字符,记录下索引,再从后遍历出第一个非空白字符,记录下索引,使用函数slice返回我们想要的字符。

String.prototype._trim = function() {
       const str = this.toString();
       let start_index;
       let end_index;
       for (let index = 0; index < str.length; index++) {
            if (str[index] !== ' ') {
                start_index = index;
                break;
            }
       }
       for (let index = str.length - 1; index >= 0 ; index--) {
            if (str[index] !== ' ') {
                end_index = index;
                break;
            }
       }
      return str.slice(start_index, end_index + 1);
}

以上两种方法实现了我们简单的trim()方法,在lodash中还实现了去除指定字符、trimEndtrimStart方法,大家可以尝试实现下。

反转字符串

这是leetcode中的一道题 反转字符串,要求我们将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出,不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 实现步骤如下:

  1. 判断输入的字符数组的长度是否为0,是则返回空数组[]
  2. 将第一位和倒数第一位互换位置,第二位和倒数第二位互换,以此类推,直到前后两个指针相等或起始指针大于尾部指针。
var reverseString = function(s) {
    if (!s.length) return [];
    let start = 0;
    let end = s.length - 1;
    while(start < end) {
        [s[start], s[end]] = [s[end], s[start]];
        start++;
        end--;
    }
    return s;
};

至此,我们的反转字符串方法就写完了,大家可以在leetcode上进行测试。

startsWith

最后我们在实现一个startsWith()方法,他用来判断我们的字符串是否以某个字符开头,返回truefalse。实现步骤:

  1. 现将调用该方法的对象进行toString,获取字符串
  2. 从起始位置开始,到我们指定字符的长度结束,看看截取的字符是不是和传入的字符相等
String.prototype._startsWith = function(target) {
    const str = this.toString();
    const end = target.length;
    return str.slice(0, end) === target;
}
console.log('a-b-c'._startsWith('a')); // true
console.log('a-b-c'._startsWith('a-')); // true

今天我们的内容就到这里了,先学习这三个字符串方法吧。