Enunciado: Que nuestra función devuelva true si la frase que nos pasan por argumento es un palíndromo, de lo contrario, que devuelva false.
Explicación: Un palíndromo es una palabra o una frase que se lee por igual hacía delante y hacía atrás, ignorando todos los signos de puntuación, símbolos y espacios.
Pistas: Eliminar los signos de puntuación y transformar todas las letras a minúsculas.
Lecturas recomendadas:
Bien, empecemos con la explicación y solución del problema.
Lo primero que hago es pasar el string que nos pasan por argumento a otra variable a la vez que lo transformo enteramente a minúsculas.
var lowerCase=str.toLowerCase();
Lo siguiente que hago es quitar todos los caracteres tipo espacios, puntos, comas, barras bajas con el método replace(); Este método funciona de la forma que, le tenemos que pasar dos argumentos, el primero es lo qué tiene que buscar y lo segundo con que reemplazarlo una vez encontrado.
Como podemos ver, le indicamos que lo reemplace por », es decir, nada, que simplemente los quite.
Creamos una variable de tipo matriz y le asignamos el valor del string que anteriormente habiamos quitado signos de puntuaciones y convertido a mayúscula. Lo asignamos con dos métodos a la vez. El primero, .split(), lo que hace es separar e introducir letra por letra lo que hay en lowerCase a strReversed transformándolo en matriz.
lowerCase=lowerCase.replace(/\W|\_/gi,'');
Y .reverse() es bien sencillo, lo que hace es simplemente dar la vuelta a la tortilla. Si tenemos ‘hola’ dentro de la matriz lo transforma a ‘aloh’.
var strReversed=lowerCase.split('').reverse();
Ideamos una nueva variable llamada joint y asignamos la matriz anterior junto al método join(). Que lo que hace es transformar todos los elementos de dicha matriz en una única cadena de texto.
[ecko_code_highlight language=»javascript»]var joint=strReversed.join(»);[/ecko_code_highlight]
Y por última parte, la comparación de cadenas. Comparamos la cadena original, libre de mayusculas y minusculas y espacios, con la matriz invertida, joint.
if(lowerCase===joint) return true; else return false;
El código final nos quedaría así =>
function palindrome(str) { var lowerCase=str.toLowerCase(); lowerCase=lowerCase.replace(/\W|\_/gi,''); var strReversed=lowerCase.split('').reverse(); var joint=strReversed.join(''); if(lowerCase===joint) return true; else return false; } palindrome("A man, a plan, a canal. Panama");
Espero que os haya ayudado y resuelto las dudas que tengáis y a ver como avanzo con las bonfires.