Je veux faire la somme récursive d'un entier: pour diviser un entier en un tableau, puis additionner les éléments individuels jusqu'à ce que je me retrouve avec un seul tableau d'entiers.
Voici ma logique:
function digital_root(n) { return (n - 1) % 9 + 1; }
Ceci est le code d'erreur que mon Node.js me lance (à la ligne 4 dans l'exemple de code ci-dessus):
ReferenceError: digits is not defined at digital_root (repl:6:18)
Je suppose que la variable digits
est accessible dans le cadre de la boucle while, mais évidemment, je semble me tromper? Quelqu'un pourrait-il me donner un aperçu ici, s'il vous plaît?
EDIT: Merci à tous pour votre aide! J'ai résolu le problème.
Pour votre curiosité, voici la forme mathématique sous-jacente à mon algorithme:
http://mathworld.wolfram.com/DigitalRoot.html
Il aurait également pu être résolu en une seule ligne:
function digital_root(n) { let digits = (""+n).split("").map(Number); while (digits.length > 1) { let result = digits.reduce((sum, int) => sum + int); let digits = (""+result).split("").map(Number); } return digits; };
3 Réponses :
Ne définissez pas chiffres
de cette manière, les chiffres
à l'intérieur de la boucle ne devraient pas avoir let
devant elle car vous avez chiffres
déjà définis en dehors de la boucle.
Cela vous donnera le résultat attendu:
digital_root = n => (Array.from(`${n}`)).reduce((sum, val) => sum + ~~val, 0); console.log(digital_root(12345));
J'espère que cela vous aidera,
Le let intérieur pour les chiffres (ligne 5) doit être supprimé
function digital_root(n) { let digits = (""+n).split("").map(Number); while (digits.length > 1) { let result = digits.reduce((sum, int) => sum + int); digits = (""+result).split("").map(Number); } return digits; }
Le problème est le mot-clé let, car let a une portée de niveau bloc, "digits" n'est pas défini au début de la boucle while
Suppression de let pour les chiffres dans la boucle while
function digital_root(n) { let digits = (""+n).split("").map(Number); while (digits.length > 1) { let result = digits.reduce((sum, int) => sum + int); digits = (""+result).split("").map(Number); } return digits; } console.log(digital_root(47))
Cela signifie probablement que
chiffres
n'a pas de valeur. Faitesconsole.log (digits)
juste avant la boucle whilela variable est accessible dans la fonction que j'ai vérifiée. Ce n'est que dans la boucle while qu'il n'est pas accessible.
retirez le let à l'intérieur de votre boucle. vous le définissez deux fois.