这是我参与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中还实现了去除指定字符、trimEnd和trimStart方法,大家可以尝试实现下。
反转字符串
这是leetcode中的一道题 反转字符串,要求我们将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出,不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。
实现步骤如下:
- 判断输入的字符数组的长度是否为0,是则返回空数组[]
- 将第一位和倒数第一位互换位置,第二位和倒数第二位互换,以此类推,直到前后两个指针相等或起始指针大于尾部指针。
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()方法,他用来判断我们的字符串是否以某个字符开头,返回true或false。实现步骤:
- 现将调用该方法的对象进行
toString,获取字符串 - 从起始位置开始,到我们指定字符的长度结束,看看截取的字符是不是和传入的字符相等
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
今天我们的内容就到这里了,先学习这三个字符串方法吧。