JavaScript中的回文
我试图编写代码来确定字符串是否是回文。我将字符串设置为小写,去掉空格,并将其转换为数组。接下来,我将它一分为二,颠倒后半部分,比较这两个数组,看看字符串是否是回文。该函数不会记录为trueJavaScript中的回文,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
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;i log(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