功能概述
trimmedEndIndex 函数的主要作用是查找字符串中最后一个非空白字符的位置索引。这个函数通常作为字符串去除尾部空白字符的辅助函数,它能帮助我们精确定位到需要保留的字符串的结束位置。
源码实现
function trimmedEndIndex(string) {
var index = string.length;
while (index-- && reWhitespace.test(string.charAt(index))) {}
return index;
}
var reWhitespace = /\s/;
实现原理解析
原理概述
这个函数的实现原理其实很简单,就像是从后往前检查字符串的每一个字符,直到找到第一个不是空白的字符为止。
代码分析
- 变量初始化
var index = string.length;
这行代码将 index 初始化为字符串的长度。为什么要从最后开始呢?因为我们要找的是最后一个非空白字符的位置。
示例:
const str = "Hello World ";
// 初始时 index = 13
- 循环检查条件
while (index-- && reWhitespace.test(string.charAt(index))) {}
这行代码是整个函数的核心,它做了两件事:
index--:每次循环都将索引向前移动一位reWhitespace.test(string.charAt(index)):检查当前位置的字符是否为空白字符
让我们通过几个例子来看看这个循环是如何工作的:
示例 1:普通字符串
const str = "Hello World ";
// 第一次循环:index = 12,检查空格,继续
// 第二次循环:index = 11,检查空格,继续
// 第三次循环:index = 10,检查空格,继续
// 第四次循环:index = 9,检查'd',停止
// 最终返回 9
示例 2:全是空白字符的字符串
const str = " ";
// 循环会一直执行到index变为-1
// 最终返回 -1
示例 3:没有尾部空白的字符串
const str = "Hello";
// 第一次循环:index = 4,检查'o',立即停止
// 最终返回 4
- 返回结果
return index;
函数返回找到的最后一个非空白字符的位置索引。这个返回值有几种情况:
- 如果字符串末尾有空白字符,返回最后一个非空白字符的索引
- 如果字符串没有尾部空白字符,返回最后一个字符的索引(即 string.length - 1)
- 如果字符串全是空白字符,返回-1
总结
trimmedEndIndex 通过从后向前遍历的方式,配合正则表达式判断空白字符,高效地找出了字符串中最后一个非空白字符的位置。这个函数在字符串处理中经常被用作辅助函数,特别是在需要去除字符串尾部空白字符的场景中。