You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeCodeCamp回文校验器挑战代码所有用例均返回true问题排查

回文校验器代码错误原因及修复方案

你写的代码存在两处核心逻辑错误,导致所有测试用例都返回true:

  • 非字母数字字符过滤逻辑完全失效
    你使用str[i] === /[^0-9a-z]/gi判断字符是否为非字母数字,这是把字符串直接和正则对象本身做相等比较,该判断永远返回false,所以过滤逻辑全程没有执行,所有特殊字符、空格都被保留了下来。
    就算判断逻辑写对,你先把字符push进数组再调用splice(str[i], 1)删除的逻辑也不对:splice第一个参数需要传要删除元素的索引,你传了字符本身作为索引,根本找不到对应元素,无法完成删除。
  • 数组反转和比较逻辑错误
    首先let strArrRev = strArr属于引用赋值,两个变量指向内存中的同一个数组,调用reverse()方法会直接修改原数组,所以strArr和strArrRev永远是同一个数组,用===比较当然永远返回true。
    另外JS中数组属于引用类型,就算两个不同数组的内容完全一致,用===比较也会返回false,你需要先把数组转成字符串再做内容比较。

正确的实现代码如下:

function palindrome(str) {
  // 转小写 + 过滤所有非字母数字字符
  const cleanedStr = str.toLowerCase().replace(/[^0-9a-z]/gi, '');
  // 反转后和原字符串比较
  const reversedStr = cleanedStr.split('').reverse().join('');
  return cleanedStr === reversedStr;
}

内容的提问来源于stack exchange,提问作者Kynan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:15:02