为什么我的 reverse() 方法不起作用?Javascript回文问题



这是我试图解决的问题:

编写一个 Javascript 代码来检查传递的字符串是否为回文?注意:回文是向后和向前读相同的单词或短语;例如。女士,赛车等

这是我的代码。我不确定为什么它不起作用。谁能帮忙?

function is_Palindrome (str){

array1 = str.split('')
array1_orig = array1.map(a => a)
array2 = array1.reverse()
console.log(array1_orig)
console.log(array2)


for (let i = 0; i <array1.length; i++){
if(array1[i] === array2[i]){
console.log("a match") 
}
else{
console.log("not a match")
}
}

}
is_Palindrome("desk")

is_Palindrome("办公桌"(

desk 显然不是回文,所以它应该返回"不是匹配",但代码没有这样做

在第array1.reverse()行中,reverse将改变array1对象本身。这是导致您的问题的原因。

实际上,您可能不需要reverse调用自己。您只能遍历元素到中点,并从开始和结束比较第 i 个元素。

function is_Palindrome(str) {
array1 = str.split("");
const len = array1.length;
let isMatch = true;
for (let i = 0; i < len / 2; i++) {
if (array1[i] !== array1[len - 1 - i]) {
isMatch = false;
}
}
return isMatch;
}
console.log("desk - ",is_Palindrome("desk"));
console.log("racecar - ", is_Palindrome("racecar"));

当调用myArray.reverse()时,myArray也会被颠倒。

我改用array1_orig解决了这个问题:

function is_Palindrome (str){

array1 = str.split('')
array1_orig = array1.map(a => a)
// Here, you are reversing array1 and storing the result in BOTH array1 and array2.
array2 = array1.reverse()
console.log(array1_orig)
console.log(array2)


for (let i = 0; i <array1_orig.length; i++){
// Change both the line ABOVE and the line BELOW
if(array1_orig[i] === array2[i]){
console.log("a match") 
}
else{
console.log("not a match")
}
}

}
console.log("Testing : DESK")
is_Palindrome("desk")
console.log("Testing : RACECAR")
is_Palindrome("racecar")

最新更新