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

如何正确编写JavaScript回文检查器?现有代码问题如何修正?

freeCodeCamp回文检查器代码修正

现有代码的核心错误

  • 预处理逻辑无效:/\W/g.remove属于非法语法,str.toLowerCase未加括号执行调用,也没有存储处理后的结果;且\W规则无法匹配下划线_,不符合项目要求的「移除所有非字母数字字符」规则。
  • 作用域与声明错误:palindrome函数多余嵌套大括号导致作用域混乱;反转字符串时用const声明存储结果的变量,后续重新赋值会直接触发报错。
  • 反转循环逻辑错误:从字符串末尾向前遍历的循环写了i++递增规则,会直接触发死循环,无法正确生成反转后的字符串。
  • 比较逻辑错误:直接将原始输入字符串和reverseString函数本身做相等判断,既没有传入处理后的字符串调用反转函数,也没有使用预处理后的字符串做对比,判断结果完全不准。

修正后的可运行代码

function palindrome(str) {
  // 移除所有非字母数字字符,统一转为小写
  const validStr = str.replace(/[^a-z0-9]/gi, '').toLowerCase();
  // 反转处理后的字符串
  let reversedStr = '';
  for (let i = validStr.length - 1; i >= 0; i--) {
    reversedStr += validStr[i];
  }
  // 直接返回比较结果
  return validStr === reversedStr;
}

// 功能测试
palindrome("eye"); // 输出 true
palindrome("_eye"); // 输出 true
palindrome("race car"); // 输出 true
palindrome("not a palindrome"); // 输出 false

关键修正点说明

  1. 正则使用/[^a-z0-9]/gi匹配所有非字母、非数字的字符(包含下划线、空格、标点),配合replace方法直接移除,i修饰符忽略大小写,后续统一转小写避免大小写影响判断结果。
  2. 存储反转结果的变量改用let声明,允许循环中逐位拼接字符;循环条件改为i--递减,从字符串最后一位向前遍历,正确生成反转字符串。
  3. 所有逻辑收拢在palindrome函数内部,不需要额外嵌套独立的反转函数也能实现功能,直接返回预处理字符串和反转字符串的相等判断结果即可,不需要额外写if/else分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:24