将字符串转换为数组并将其另存为新数组不会返回原始数组

时间:2018-03-24 15:04:44

标签: javascript arrays

此函数清除字符串(删除所有非字母数字字符,包括下划线),然后将每个字母拆分成一个数组,以便可以反转,然后根据原始字符进行检查。

在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"); 

2 个答案:

答案 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;

代替。 : - )