JavaScript使用slice实现文本按指定长度截断到下一句句号问题求解
文本截断功能修正方案
原代码错误原因
- 调用
fulltext.indexOf(".")没有指定起始查找位置,只会返回整个字符串中第一个句号的索引,不符合「超出指定长度后找首个句号」的要求 - 切片计算逻辑错误,直接将指定长度num和第一个句号位置相加,导致切片长度计算完全不符合预期
修正后代码
function shorten(text, num) { const fulltext = text.toString(); // 文本长度不足阈值直接返回原内容 if (fulltext.length <= num) { return fulltext; } // 从num位置开始向后查找第一个句号的索引 const dotIndex = fulltext.indexOf('.', num); // 边界处理:如果num之后没有句号,直接返回原文本,也可根据需求调整为返回fulltext.slice(0, num) if (dotIndex === -1) { return fulltext; } // 截断到句号后一位,把句号本身包含在返回结果中 return fulltext.slice(0, dotIndex + 1); }
效果验证
用你给出的测试用例验证:
输入参数:
- text = "Hello. This is a test example. This part should be removed."
- num = 10
调用修正后的函数会从第10位开始查找第一个句号,对应索引就是第一个长句的末尾位置,最终返回结果和你的预期完全一致。
内容的提问来源于stack exchange,提问作者Fred Lu
相关产品推荐
相关产品推荐

