1
votes

Comment renvoyer des valeurs de fonctions dans d'autres fonctions

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>


5 commentaires

Vous avez défini check et reverse dans palindrome , mais vous ne les appelez jamais nulle part.


De plus, palindrome () ne semble accepter aucun argument.


Et palindrome ne renvoie 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)


4 Réponses :


1
votes

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));


1 commentaires

@Tyler Morales - si cela répond à votre question, veuillez accepter cette réponse.



1
votes

Vous n'avez pas besoin de deux fonctions pour cela. Une seule fonction palindrome () suffit pour vérifier les palindromes.

  1. Convertit le paramètre num en une chaîne.
  2. Attribuez numString à une chaîne vide.
  3. Transférez chaque caractère de la chaîne num vers la chaîne numString .
  4. Vérifiez si la nouvelle chaîne 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);


0 commentaires

1
votes

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!


5 commentaires

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



0
votes

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.


0 commentaires