J'essaye de vérifier si un nombre est un palindrome en Javascript
J'ai converti un nombre en chaîne, je l'ai inversé et je l'ai sauvegardé comme une nouvelle variable: reverseNum. Cependant, lorsque je vérifie si num == reverseNum
, je n'arrive pas à faire fonctionner correctement la logique
function palindrome() { function reverse(num) { num = num.toString(); let reverseNum = []; for (let i = 1; i <= num.length; i++) { reverseNum.push(num[num.length - i]); } return reverseNum.join(''); } function check(num, reverseNum) { //is palindrome if (num == reverseNum) { return true; //is not palindrome } else { return false; } } } console.log(palindrome(121));
La sortie attendue doit être vraie si par exemple input: 121, output: 121
La sortie attendue doit être fausse si par exemple input: 79, output: 97
p>
4 Réponses :
J'ai créé des fonctions séparées. J'espère que cela vous aidera.
function reverse(num) { num = num.toString(); var reverseNum = []; for (var i = 1; i <= num.length; i++) { reverseNum.push(num[num.length - i]); } return reverseNum.join(''); } function palindrome(num) { var reverseNum = parseInt(reverse(num)); console.log("Num:", num); console.log("Reverse Num:", reverseNum); if (num === reverseNum) return true; //is not palindrome else return false; } console.log(palindrome(121));
@Tyler Morales - si cela répond à votre question, veuillez accepter cette réponse.
Vous n'avez pas besoin de deux fonctions pour cela. Une seule fonction palindrome ()
suffit pour vérifier les palindromes.
num
en une chaîne. numString
à une chaîne vide. num
vers la chaîne numString
. numString
est la même que la chaîne num
initiale.
function palindrome(num) { num = num.toString(); let reverseNum = ""; for(i = 1; i <= num.length; i++) { reverseNum += num.charAt(num.length - i); } if (num == reverseNum) { console.log(num + " is a Palindrome!!"); return true; } else { console.log(num + " is not a Palindrome!!"); return false; } } palindrome(224); palindrome(424); palindrome(222); palindrome(363);
Comme le suggèrent les commentaires, cela revient simplement à ne pas passer de valeur dans la fonction palindrome
et à ne rien en renvoyer. En tant que tel, il s'agit d'une solution assez rapide:
// convert our numbers to strings `${number}` === `${number}` // split the string into an array .split('') // reverse the array .reverse() // convert the array back to a string .join('')
Cela peut être fait avec un peu moins de code, en convertissant le nombre en tableau, en l'inversant, puis en le vérifiant:
`${number}` .split('') .reverse()
Modifier Pour expliquer plus en détail, comme demandé.
J'ai pensé à le convertir en fonctions standard afin d'essayer de le rendre un peu plus clair, mais je pense qu'il serait préférable d'expliquer ce qui se passe. P >
$ {number}
convertit simplement notre nombre en chaîne. Nous voulons faire cela pour pouvoir le convertir plus facilement en tableau.
Nous voulons le convertir en tableau car les tableaux ont une méthode reverse
, ce qui est exactement ce que nous avons besoin. Donc, pour obtenir un tableau inversé, nous pouvons utiliser:
const palindrome = number => `${number}` === `${number}` .split('') .reverse() .join('') console.log(palindrome(121)) console.log(palindrome(1211))
Nous avons donc maintenant un tableau qui est les caractères de notre nombre inversés. Nous devons maintenant mettre cela sous une forme que nous pouvons utiliser pour comparer au nombre d'origine. Pour ce faire, nous pouvons le ramener à une chaîne en utilisant join ()
. Nous avons maintenant une chaîne inversée du nombre initial. Maintenant, nous avons juste besoin de comparer cela au nombre initial pour voir si nous avons un palindrome.
Comme ce n'est pas vraiment idéal de comparer un nombre à une chaîne, nous devons en convertir un. Dans mon exemple, j'ai converti le nombre initial en une chaîne en utilisant ${number}
.
La syntaxe de la flèche est juste un raccourci pour une fonction standard (bien qu'il y en ait d'autres différences qui ne sont pas pertinentes pour le moment).
Comme les méthodes que nous utilisons prennent dans un tableau et renvoient un tableau, nous pouvons les enchaîner pour rendre le code simple et agréable.
En résumé:
function palindrome(number) { function reverse(num) { num = num.toString(); let reverseNum = []; for (let i = 1; i <= num.length; i++) { reverseNum.push(num[num.length - i]); } return reverseNum.join(''); } function check(num, reverseNum) { //is palindrome if (num == reverseNum) { return true; //is not palindrome } else { return false; } } return check(number, reverse(number)) } console.log(palindrome(1211));
Si vous avez des questions spécifiques, faites-le moi savoir!
Pourriez-vous expliquer un peu plus la première ligne?
La première ligne du deuxième exemple?
@OliverRadini, si vous utilisez la fonction
, ce serait plus facile à analyser pour un débutant.
bien sûr, je vais ajouter une petite explication
@TylerMorales C'est mis à jour maintenant avec plus d'explications
Cela fera
function palindrome(num) { num = num.toString(); let reverseNum = []; for (let i = 1; i <= num.length; i++) { reverseNum.push(num[num.length - i]); } var e=reverseNum.join('') alert(e) return check(num,e); } function check(num, reverseNum) { //is palindrome if (num == reverseNum) { return true; //is not palindrome } else { return false; } } alert(palindrome(121));
Vous n'avez pas renvoyé la fonction de vérification et il y a une erreur avec vos portées de fonction.
Vous avez défini
check
etreverse
danspalindrome
, mais vous ne les appelez jamais nulle part.De plus,
palindrome ()
ne semble accepter aucun argument.Et
palindrome
nerenvoie
rien non plus.@MarkMeyer J'ai essayé d'ajouter les arguments num et reverseNum, mais j'ai eu une erreur alors je les ai supprimés
Votre code n'est pas compliqué essayez cette fonction
test (val) {const newVal = val.toString (). Split (''). Reverse (). Join ('') return val.toString () === newVal } console.log (121)