如何判断字符串是否以指定字符串结尾?JS函数报错排查
问题排查与修复
原代码的核心错误
- 变量名冲突:
filter回调里的参数名用了str,和外层函数的入参str重名。split后的数组元素是单个字符,所以回调里的str.length永远是1,导致str.length > str.length -2的条件始终为真,filter会保留所有字符,最终得到的还是原字符串,完全无法正确截取结尾部分。 - 截取逻辑错误:硬编码用
str.length -2来截取,没有考虑ending的实际长度,即使变量名不冲突,也只能处理长度为2的ending,通用性为0。 - 返回值类型错误:题目要求返回布尔值
true/false,但代码返回的是字符串"true"/"false",这就是测试报错expected 'false' to equal true的直接原因——测试用例期望布尔值,你返回了字符串类型的结果。
修复后的实现
方法1:手动截取比较(兼容旧环境)
function solution(str, ending) { // 空字符串默认是任何字符串的结尾 if (ending.length === 0) return true; // 截取str最后N个字符,N等于ending的长度 const strSuffix = str.slice(-ending.length); return strSuffix === ending; }
方法2:使用原生endsWith方法(简洁高效,ES6+)
JavaScript字符串原生提供了endsWith方法,直接满足需求:
function solution(str, ending) { return str.endsWith(ending); }
测试验证
solution('abc', 'bc')→ 返回truesolution('abc', 'd')→ 返回falsesolution('hello', '')→ 返回true(符合字符串结尾规则)
内容的提问来源于stack exchange,提问作者Emma Maina
相关产品推荐
相关产品推荐

