JavaScript回文字符串检测函数代码简化求助
简化JavaScript回文检测函数的实现
我正在学习JavaScript,编写了一个检测字符串是否为回文的函数,该函数会移除所有非字母数字字符并转换为小写。我希望简化这段代码,尤其不满将内容转为数组的操作以及当前判断字符是否为字母数字的方式,原代码如下:
function palindrome(str) { str = str.replace(/\s+/g, ''); str = str.toLowerCase(); let aux = ''; let aux2= ''; let array = []; for(let i=0;i<str.length;i++) if(str[i] == "!" || str[i] == "@" || str[i] == "#" || str[i] == "$" || str[i] == "%" || str[i] == "&" || str[i] == "*" || str[i] == '"' || str[i] == "/" || str[i] == "(" || str[i] == ")" || str[i] == ":" || str[i] == ";" || str[i] == "-" || str[i] == "_" || str[i] == "." || str[i] == ","){} else{ aux+=str[i]; } for(let j=0;j<aux.length;j++){ array.unshift(aux[j]); } for(let x=0;x<array.length;x++){ aux2+=array[x]; } if(aux==aux2){ return true; }else{ return false; } }
优化后的代码
function palindrome(str) { // 移除所有非字母数字字符并转为小写 const processedStr = str.toLowerCase().replace(/[^a-z0-9]/g, ''); // 反转字符串并与原处理后的字符串比较 return processedStr === processedStr.split('').reverse().join(''); }
关键改进点
- 简化非字母数字字符过滤:用正则
/[^a-z0-9]/g直接匹配所有非字母数字字符(包括空格),一次性替换为空,替代原代码中手动判断大量符号的繁琐逻辑,同时合并转小写的操作。 - 移除冗余的数组操作:原代码通过循环把字符逐个插入数组头部再拼接成反转字符串,直接用
split('').reverse().join('')就能完成字符串反转,一行代码搞定。 - 简化返回逻辑:直接返回处理后的字符串和反转字符串的比较结果,省去冗余的if-else分支判断。
内容的提问来源于stack exchange,提问作者Marco007
相关产品推荐
相关产品推荐

