You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript回文数检测函数异常,数组相等却返回false求解

问题原因及修复方案

核心问题1:数组的==比较逻辑不对

JavaScript里数组属于引用类型,用==比较时,只会检查两个数组是不是同一个内存对象,不会对比数组内的元素内容。哪怕两个数组元素完全一致,只要是独立创建的,==都会返回false。比如:

const arr1 = ['1','2','3'];
const arr2 = ['1','2','3'];
console.log(arr1 == arr2); // 输出false

核心问题2:reverse()是原地修改方法

你代码里两次调用了array2.reverse():

  1. 第一次console.log(array2.reverse()):reverse()直接修改了array2本身,把它从['3','2','1']变成['1','2','3'],所以控制台能看到两个数组都是['1','2','3']。
  2. 第二次return array1 == array2.reverse():这时候array2被再次反转,变回了['3','2','1']。

这时候你拿array1(['1','2','3'])和反转后的array2(['3','2','1'])做引用比较,结果自然是false。


修复代码示例

方法1:转字符串比较

把两个数组转成字符串后再对比,直接验证内容是否一致:

function luckyNumber(value) {
  let array  = String(value).split('');
  let array1 = array.slice(0, array.length / 2);
  let array2 = array.slice(array.length / 2, array.length);
  
  if (array2.length > array1.length) {
    array2.shift();
  }
  
  // 创建反转副本,不修改原数组
  const reversedArray2 = [...array2].reverse();
  console.log(array1);
  console.log(reversedArray2);
  
  return array1.join('') === reversedArray2.join('');
}

console.log(luckyNumber(1234321)); // 输出true

方法2:遍历元素逐一对比

更严谨的方式是逐个检查数组元素:

function luckyNumber(value) {
  let array  = String(value).split('');
  let array1 = array.slice(0, array.length / 2);
  let array2 = array.slice(array.length / 2, array.length);
  
  if (array2.length > array1.length) {
    array2.shift();
  }
  
  const reversedArray2 = [...array2].reverse();
  console.log(array1);
  console.log(reversedArray2);
  
  // 长度不等直接返回false
  if (array1.length !== reversedArray2.length) return false;
  // 遍历对比每个元素
  for (let i = 0; i < array1.length; i++) {
    if (array1[i] !== reversedArray2[i]) return false;
  }
  return true;
}

console.log(luckyNumber(1234321)); // 输出true

内容的提问来源于stack exchange,提问作者Oto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:12:56