此函数清除字符串(删除所有非字母数字字符,包括下划线),然后将每个字母拆分成一个数组,以便可以反转,然后根据原始字符进行检查。
在console.log(cleanStr)中,它返回反向数组,但我不知道为什么。
function checkIfPalindrome(str) {
var cleanStr = str.toLowerCase().replace(replace, "" ).split("");
var reversedStr = cleanStr.reverse();
console.log(cleanStr); // why is this returning reverseStr, the reversed array?
if (cleanStr == reversedStr){
return true
}
return false
}
checkIfPalindrome("five|\_/|four");
答案 0 :(得分:3)
reverse()
方法将数组反转到 - 它会改变它所调用的数组。请尝试创建一个新数组:
const cleanStr = str.toLowerCase().replace(replace, "" ).split("");
const reversedStr = [...cleanStr].reverse();
答案 1 :(得分:1)
在console.log(cleanStr)中,它返回反向数组,但我不知道为什么。
因为reverse
将其反转。
另外,你有一个问题:
if (cleanStr == reversedStr){
如果 不同的数组,即使它们具有相同的内容,也总是错误的。
如果你想制作一个数组的副本然后反转它,在那里抛出一个.slice()
:
var reversedStr = cleanStr.slice().reverse();
// -----------------------^
...然后在将它们变回字符串后进行比较:
if (cleanStr.join("") === reversedStr.join(""))
(我可能也会更改这些变量名称,因为它们不会引用字符串。)
最后,每当你发现自己写作时:
if (x == b) {
return true;
}
return false;
备份并写入
return x == b;
代替。 : - )