我创建了这个函数来检查一个数字是否是回文,但它不起作用。它实际上非常简单,它将有数组,这是数字的两个一半,第一个和第二个(颠倒),它将比较它们。
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
有人能给我解释一下吗谢谢你!
3条答案
按热度按时间yqhsw0fo1#
根据JS Docs,
.reverse()
就地发生。即-当调用
.reverse()
时,数组在存储器中反转。因此,当记录array2.reverse()
的输出时,您也(意外地)反转了数组的实际后半部分。(所以变成[1,2,3])。然后,当比较两半时,你又把它颠倒过来了
return();
如果你真的是[1,2,3]与[3,2,1]比较。
因此,只反转一次。
还有
Array equality is hard in js
您可以选择:
或
jhdbpxl92#
array1
或array2.reverse()
值与它们的内容无关,而是他们的系统地址
在字符串中更改数组:
q5iwbnjs3#
你不能用这种方式比较两个数组,你可以用这个:
但我做了类似的时间前,我修改您的需要: