Categorías
Javascript

Bonfire: Check for Palindromes

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.

\W quita las comas, puntos y espacios
\_ quita las barras bajas.
/g significa que mire todos los casos, no solo el primero que se encuentre que cumpla la condición que le hemos pasado 
/i lo que hace es ignorar que sean mayúsculas o minúsculas.

 

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 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.

Por Deniz M.

Desarrollador a tiempo completo, amante del buen rol y los juegos de plataforma. Mi tiempo libre me gusta invertirlo para ver series y malas peliculas