Поиск количества палиндромов в массиве
Мне в задании необходимо:
Найти количество пятизначных палиндромов, являющиеся числами.
Условие задачи мне не до конца было понятно, но решил остановиться на вводе вручную или заранее массива, в каждой ячейке которого вписано 5-значное число.Далее мы выполняем цикл, в котором проходимся по каждому числовому элементу, переворачиваем и сравниваем с оригинальным за счет if и заносим + ,если совпадает,для дальнейшего вывода необходимого количества.
У меня есть код,написанный для случая,когда вводим одно число и проверяется палиндром,но я не знаю,как адаптировать к этому случаю.Пробовал переписать, используя функцию arrayObj.reverse() , но это меняет порядок в самом массиве.
Код,написанный для одного числа:
XT=prompt("Число " + 'x');
x=parseInt(XT);
var TString = x.toString();
var Reversed = TString.split("").reverse().join("");
var Back = Number(Reversed);
document.write("Оригинал " + x);
document.write('<BR><BR>');
document.write("Перевернутое " + Back);
if (Back == x) { alert('Да'); }
else { alert('Нет'); }
Ответы (3 шт):
если я правильно понял палиндром это если что то перевернуть нечего не поменяется
let arr = ['123321','123','1234a','12345','ab214','12321','null','undefined','54345']
const palindrome = (arr) => {
let count = 0
for(let key of arr){
if(key.length > 5 || key.length < 5){
continue
}
if(parseInt(key).toString().length != key.length){
continue
}
if(+key == +key.split('').reverse().join('')){
count++
}
}
return count
}
let rezult = palindrome(arr) //возвращает count в rezult
alert(rezult)
console.log(palindrome(arr)) // этот метод выводит в консоль
const имя = () => {} это функция есть другие варианты написания если кратко инкапсулируем логику функции для Поиска количества палиндромов и вызываем где и когда нам нужно 1% из 100% про функцию
key.length длинна одной строки в массиве если больше 5 или меньше 5 то сразу исключаем. в задаче только 5изначные
return count возврошает результат выполнения функции там где он вызывается
alert это метод браузера а console.log есть не только в бразуере и чтобы увидеть результат надо нажать f12 в браузере это консоль разработчика и перейти в console
поскольку дана фиксированная длина искомой строки, то проверку можно выполнять только для пар значений 1-5, 2-4, исключая сплит, реверс, конкатенацию, посимвольное сравнение всей длины.
const data = ['123321','123','1234a','12345','ab214','12321','null','undefined','54345'];
let result = data.filter(function(v){
if(v.length !=5 ) return false;
if(parseInt(v) != v) return false;
return (v[0] == v[4] && v[1] == v[3]);
});
console.log(result);
если хотите сразу количество получить, то filter заменить на reduce.
return false станет return acc, а в конце return acc + ....
const data = [
12345,
12321,
32123,
54321,
];
const res = data.filter(n => (n+'').match(/^(\d)(\d)\d\2\1$/));
console.log(res);