Javascript, o que estou fazendo de errado aqui?

  • Autor Autor Mago Merlin
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
Status

🔒 Este tópico está fechado para novas respostas.

⏰ Apenas o criador do tópico pode solicitar a reabertura de seus próprios tópicos, mas apenas dentro dos 60 dias anteriores à última atualização.

M

Mago Merlin

Gamma
No recomendado
Usuário com poucas negociações! Use sempre o saldo do 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:

Inserir CODE, HTML ou 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: ?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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 edição:
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 edição:
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:
 
Status

🔒 Este tópico está fechado para novas respostas.

⏰ Apenas o criador do tópico pode solicitar a reabertura de seus próprios tópicos, mas apenas dentro dos 60 dias anteriores à última atualização.

Voltar
Topo