JavaScript中的回文

JavaScript中的回文,javascript,arrays,string,function,palindrome,Javascript,Arrays,String,Function,Palindrome,我试图编写代码来确定字符串是否是回文。我将字符串设置为小写,去掉空格,并将其转换为数组。接下来,我将它一分为二,颠倒后半部分,比较这两个数组,看看字符串是否是回文。该函数不会记录为true let string = "Never odd or even"; let lowerString = string.toLowerCase(); let split = lowerString.split(""); let array = split.filter(noSpaces); function

我试图编写代码来确定字符串是否是回文。我将字符串设置为小写,去掉空格,并将其转换为数组。接下来,我将它一分为二,颠倒后半部分,比较这两个数组,看看字符串是否是回文。该函数不会记录为true

let string = "Never odd or even";
let lowerString = string.toLowerCase();
let split = lowerString.split("");
let array = split.filter(noSpaces);

function noSpaces(i) {
  return i !== " ";
}

function checkIfPal() {
  if (array.length % 2 === 1) {
    let firstHalf = array.slice(0, array.length / 2);
    let secondHalf = array.slice(array.length / 2 + 1, array.length);
    let revSecondHalf = [];
    for (let i = secondHalf.length - 1; i > -1; i--) {
      revSecondHalf.push(secondHalf[i]);
    }
    if (firstHalf === revSecondHalf) {
      console.log("true for odd");
    } else {
      console.log("false for odd");
    }
  } else {
    let firstHalf = array.slice(0, array.length / 2);
    let secondHalf = array.slice(array.length / 2, array.length);
    let revSecondHalf = [];
    for (let i = secondHalf.length - 1; i > -1; i--) {
      revSecondHalf.push(secondHalf[i]);
    }
    if (firstHalf === revSecondHalf) {
      console.log("true for even");
    } else {
      console.log("false for even");
    }
  }
}
checkIfPal();
在这一行

if (firstHalf === revSecondHalf) {
您试图比较两个数组,但JavaScript不允许您使用
==
来进行比较,因为它们是两个不同的对象。
将每个数组连接到一个字符串,然后比较它们,或者循环一个数组中的元素,将它们与另一个数组中相同索引的元素进行比较


前一种方法更简单。

有一种更简单的方法

  • 去掉任何不是字母或数字的东西
  • 将字符串的大小写改为小写
  • 在绳子的一半上打圈
  • 比较当前字母和最后一个字母减去当前位置
  • 函数isAlindrome(str){
    str=str.replace(/[^\w\d]/g',).toLowerCase();
    const len=str.length;
    for(设i=0;ilog(isPalindrome(“一个圣诞老人在美国宇航局像魔鬼一样生活”)在脚本中,您使用
    =
    将两个数组对象相互比较

    如果比较中的变量引用完全相同的数组对象,则返回
    true
    。但是,如果它们指向两个不同的数组对象,即使它们的内容相同,也将始终返回
    false

    如果希望继续使用数组进行比较,则需要检查数组的每个元素是否相同

    function compareArrayElements(arr1, arr2) {
        if (arr1.length != arr2.length)
            return false;
        for (var i=0;i<arr1.length;i++) {
            if (arr1[i] != arr2[i])
                return false;
        }
        return true;
    }
    
    函数比较层元素(arr1、arr2){
    如果(arr1.length!=arr2.length)
    返回false;
    对于(var i=0;i一种基于比较数组与其反面的算法:

    const isPalindrome=(str)=>{
    //消除标点和空格
    //强制小写
    //分裂
    让arr=str.toString().替换(/[^A-Za-z0-9.]/g,”).toLowerCase().拆分(“”);
    //连成一个词
    let join=arr.join(“”);
    //反向连接成一个单词
    让reverseJoined=arr.reverse().join(“”);
    //比较
    返回连接==反向连接;
    }
    控制台日志(isPalindrome(“红色朗姆酒,先生,是谋杀”);
    控制台日志(isPalindrome(404));
    控制台日志(isPalindrome(“红色朗姆酒,先生”);
    
    console.log(isAlindrome(500));
    为什么不检查
    i
    处的字符是否等于
    length-i-1
    处的字符,直到到达一半?另外,“我不确定出了什么问题”无法充分解释您的问题,出现了什么问题?您试图使用
    ==
    比较两个数组,但您无法这样做。您需要
    将数组连接到两个字符串中,然后比较它们。一行程序很有趣:
    常量isPalindrome=s=>s.length