为什么判断字符串是否含连续重复字符的JavaScript函数运行不符合预期?
你的代码存在3个核心问题
- 循环边界错误:你的for循环条件写的是
i <= str.length,字符串下标从0开始,最大有效下标是str.length - 1。当i等于str.length时,str[i]和str[i+1]都是undefined,undefined === undefined的判断结果为真,所以即使没有连续重复的字母,循环跑到最后一次也会返回"True",这是你遇到问题的核心原因。 - 缺失默认返回值:如果不存在连续重复的字母,循环跑完后函数没有任何返回语句,会默认返回
undefined,不符合判断函数的预期逻辑。 - 返回值类型不合理:目前返回的是字符串类型的"True",建议返回布尔值
true/false,方便后续逻辑调用判断。
修正后的原逻辑代码
function doubleCheck(str){ // 循环条件改成i < str.length - 1,保证i+1不会超过最大有效下标 for (var i = 0; i < str.length - 1; i++){ var n = i + 1; if (str[i] === str[n]){ return true; } } // 循环跑完没找到重复,返回false return false; }
更简洁的正则解法
如果不需要保留遍历逻辑,可以用正则匹配实现更短的代码:
function doubleCheck(str) { // 匹配任意连续两个相同的字符,test方法直接返回布尔值 return /(.)\1/.test(str); } // 如果只需要判断字母(排除数字、符号等),可以把正则改成/([a-zA-Z])\1/
内容的提问来源于stack exchange,提问作者Dale Luce
相关产品推荐
相关产品推荐

