Я пытаюсь написать код, чтобы определить, является ли строка палиндромом. Я делаю строку строчными буквами, вынимаю пробелы и превращаю ее в массив. Затем я делю его пополам, переворачиваю вторую половину и сравниваю эти два массива, чтобы увидеть, является ли строка палиндромом. Функция не регистрирует истину.
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();
i
с символом вlength - i - 1
, пока не дойдете до половины пути? Кроме того, Я не уверен, что не так не является достаточным объяснением вашей проблемы, что пошло не так? - person RobG   schedule 22.11.2018===
, что у вас не получается. Вам нужноjoin
объединить массивы в две строки и затем сравнить их. - person Andy   schedule 22.11.2018const isPalindrome = s => s.length <= 1 ? true : (s.substr(-1) === s.substr(0, 1) && isPalindrome(s.substr(1, length-2)))
Вы можете предварительно обработать строку, чтобы удалить пробелы и верхние буквы. - person spender   schedule 22.11.2018let isPalindrome = s => s.toLowerCase().replace(/[^a-z0-9]/g,'').split('').every((c, i, o) => c == o[o.length - ++i])
, хотя он выполняет примерно в два раза больше тестов, чем требуется минимально. :-) - person RobG   schedule 22.11.2018