javascript 函数来检查数字是回文不正常工作

btxsgosb  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(301)

我创建了这个函数来检查一个数字是否是回文,但它不起作用。它实际上非常简单,它将有数组,这是数字的两个一半,第一个和第二个(颠倒),它将比较它们。

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();
  }
  console.log(array1)
  console.log(array2.reverse())
  return array1 == array2.reverse();
}

console.log(luckyNumber(1234321));

我以为它会正常工作,但当我最后打印两个数组和最后一个布尔值时,它抛出了这个:

[ '1', '2', '3' ]
[ '1', '2', '3' ]
false

有人能给我解释一下吗谢谢你!

yqhsw0fo

yqhsw0fo1#

根据JS Docs.reverse()就地发生。
即-当调用.reverse()时,数组在存储器中反转。因此,当记录array2.reverse()的输出时,您也(意外地)反转了数组的实际后半部分。(所以变成[1,2,3])。
然后,当比较两半时,你又把它颠倒过来了
return();
如果你真的是[1,2,3]与[3,2,1]比较。
因此,只反转一次。

还有

Array equality is hard in js

[1,2,3]==[1,2,3] // false

您可以选择:

JSON.stringify(arr1) === JSON.stringify(arr2);

const isEqual = arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]);
jhdbpxl9

jhdbpxl92#

array1array2.reverse()值与它们的内容无关,
而是他们的系统地址
在字符串中更改数组:

function luckyNumber(value)
  {
  let 
    arr  = [...value.toString(10)]
  , str1 = arr.slice(0, arr.length / 2).join('')
  , str2 = arr.slice(arr.length / 2, arr.length).reverse().join('')
    ;
  if (str2.length > str1.length) 
    str2 = str2.slice(0,-1); 

  console.log( str1 , str2 )

  return str1 === str2;
  }

  console.log(luckyNumber(1234321));
q5iwbnjs

q5iwbnjs3#

你不能用这种方式比较两个数组,你可以用这个:

return JSON.stringify(array1) === JSON.stringify(array2);

但我做了类似的时间前,我修改您的需要:

function luckyNumber(value) {
let stringNumber = String(value);

  let sizeStringNumber = stringNumber.length;
  
  for(let i = 0; i < sizeStringNumber / 2; i++){
      if(stringNumber[i] !== stringNumber[sizeStringNumber-1-i]){
          return false;
      }
  }
  return true;
}

console.log(luckyNumber(1234321));
console.log(luckyNumber(1234320));
console.log(luckyNumber(1234311));
console.log(luckyNumber(12344321));

相关问题