¿Javascript qué estoy haciendo mal aquí?

  • Autor Autor Mago Merlin
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

M

Mago Merlin

Gamma
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Amigos, resulta que he comenzado a aprender el lenguaje javascript hace unas horas, y me he quedado atascado en un ejercicio, el ejercicio dice lo siguiente:

Definir una función que determine si la cadena de texto que se le pasa como parámetro es un palíndromo, es decir, si se lee de la misma forma desde la izquierda y desde la derecha.

Ejemplo de palíndromo: "la ruta nos aporto otro paso natural" o "anita lava la tina"

Pero llevo ya atascado tratando de resolverlo, y no se que puede estar mal 🙁 , pueden ayudarme? El código que tengo es el siguiente:

Insertar CODE, HTML o PHP:
var frase = prompt("Ingrese la frase o palabra: ");

function palindromo(fra) {
	// Convierto la cadena a minúscula
	var minuscula = fra.toLowerCase();
	alert(minuscula);
	// Convierto la cadena en un array
	var convertirArray = minuscula.split("");
	alert(convertirArray);
	// Elimino los espacios del array
	var sinEspacios = "";
	for (i in convertirArray) {
		if (convertirArray[i] != " ") {
			sinEspacios += convertirArray[i];
		}
	}
	alert(sinEspacios);
	// Vuelvo a convertir en array
	var nuevoArray = sinEspacios.split("");
	var alReves = nuevoArray.reverse();
	alert(alReves);
	[B][COLOR="#FF0000"]// Verifico sin son iguales[/COLOR][/B]
	flag = true;
	for (i in nuevoArray) {
		if (nuevoArray[i] != alReves[i]) {
			flag = false;
			break;
		};
	};
	if (flag) {
		return("La cadena es un palíndromo.");
	}
	else {
		return("La cadena NO es un palíndromo.");
	}
};


alert(palindromo(frase));

A partir de donde he colocado el comentario rojo es donde creo que debe estar el problema, sin embargo no logro dar con la solución, alguien puede ayudarme :sorrow: ?
 
Hola PF... :fatigue:

PHP:
function reverse(s) {
  return s.split('').reverse().join('');
}
var cadena ="anita lava la tina";
cadena = cadena.toLowerCase(); //pasar a minusculas
cadena1 =  cadena.replace(/ /g,""); //Sacamos espacios
cadena2 = reverse(cadena1); //invertir cadena
if(cadena1 === cadena2) alert("Palindromos"); else alert("No son Palindromos");


esa seria tu solución bien simle y sin tanto lio...

https://jsfiddle.net/9haappy4/1/
 
Última edición:
Hola PF... :fatigue:

PHP:
function reverse(s) {
  return s.split('').reverse().join('');
}
var cadena ="anita lava la tina";
cadena = cadena.toLowerCase(); //pasar a minusculas
cadena1 =  cadena.replace(/ /g,""); //Sacamos espacios
cadena2 = reverse(cadena1); //invertir cadena
if(cadena1 === cadena2) alert("Palindromos"); else alert("No son Palindromos");


esa seria tu solución bien simle y sin tanto lio...

https://jsfiddle.net/9haappy4/1/

Gracias por la ayuda amigo, aunque como he comentado soy novato en el lenguaje, me atrevo a decir que en la programación, y no entiendo el código jaja, pero bueno, seguiré estudiando para poder comprenderlo. Por cierto gracias por tomar un poco de tiempo en atender a mi consulta.
 
Tu problema está en que reverse() te convierte el array actual, así que siempre los 2 arrays que comparas son iguales.

Pero te estás complicando mucho, con el código que ya tienes y nada más agregando las funciones replace() y join() lo puedes hacer mucho más sencillo:
PHP:
function palindrome(str)
{
    var phrase = str.trim().toLowerCase().replace(/ +/gi, '');
    var reverse = phrase.split('').reverse().join('');

    return phrase === reverse;
}

y ya luego nada más la condición:
PHP:
if (palindrome(phrase)) {
    // Es palindromo
} else {
    // No es palindromo
}

Saludos.
 
Última edición:
Tu problema está en que reverse() te convierte el array actual, así que siempre los 2 arrays que comparas son iguales.

Pero te estás complicando mucho, con el código que ya tienes y nada más agregando las funciones replace() y join() lo puedes hacer mucho más sencillo:
PHP:
function palindrome(str)
{
    var phrase = str.trim().toLowerCase().replace(/ +/gi, '');
    var reverse = phrase.split('').reverse().join('');

    return phrase === reverse;
}

y ya luego nada más la condición:
PHP:
if (palindrome(phrase)) {
    // Es palindromo
} else {
    // No es palindromo
}

Saludos.

Vale amigo, gracias por la ayuda, jeje es que no conocía esas funciones :drunk:
 
Gracias por la ayuda amigos, paso a cerrar el tema :encouragement:
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Atrás
Arriba