Javascript boucle de récursivité des éléments de la matrice de
Je suis en train de faire un petit programme qui demande à un utilisateur d'ajouter des éléments à une liste d'épicerie.
J'ai lu sur l'utilisation de la récursivité de la boucle. Je comprends alors que la boucle serait probablement mieux adapté pour cette tâche, mais j'ai rencontré les mêmes problèmes avec la boucle while et je voulais essayer de récursivité. Il semble juste comme je sais ce que je fais... "Ouai, j'ai utilisé la récursivité pour énumérer le tableau tout en invitant la validation de l'utilisateur... hur hur hur"... mais, je m'égare.
Voici le code:
function addToArray() {
var array = [];
array.push(prompt("Add items to array or 'q' to stop"));
if (array.pop() == 'q') {
document.write(array)
}
else {
addToArray();
}
}
addToArray();
Si vous l'aurez remarquez, il fait une boucle comme son supposé, mais il n'est pas d'ajouter des éléments à un tableau. J'ai essayé le array[i] = i
de la technique, mais en vain, le tableau reste vide. Aussi, pourquoi est-ce que par l'utilisation d'une fonction sans arguments, je ne suis pas en cours d'exécution dans trop de la récursivité? C'est à cause de l'instruction conditionnelle?
Si vous savez ce que je fais mal, essayer et pointe vers la bonne réponse, plutôt que de simplement blurting il. J'aimerais avoir que " Aha moment. Je pense que cela nous permet d'en apprendre un peu mieux.
Merci les gars. (et les filles)
- astuce #1:
var array = [];
crée un nouveau tableau à chaque appel de fonction - astuce n ° 2: vous n'avez pas besoin de faire de la récursivité, mais une boucle infinie
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de créer un nouveau tableau au lieu de passer à l'appel récursif.
Faire cela à la place.
DÉMO: http://jsfiddle.net/kDtZn/
Maintenant vous commencez avec un tableau vide, et pour chaque appel récursif, il passe à la même matrice de l'avant.
Aussi, je l'ai changé de sorte qu'il n'utilise pas
.pop()
dans leif()
condition, sinon, vous aurez toujours se retrouver avec un tableau vide quand vient le temps de l'écrire. (Le.pop()
méthode réellement supprime le dernier élément.)Enfin, assurez-vous que vous n'utilisez pas
document.write
après le DOM est chargé. Si oui, vous devez le modifier pour utiliser la manipulation DOM méthodes à la place.Vous pouvez prendre une approche différente de sorte que vous n'avez pas besoin
.pop()
à tous.DÉMO: http://jsfiddle.net/kDtZn/1/
La raison de votre
while
boucle n'a pas de travail est très probablement à cause de l'original.pop()
question.array[array.length-1] == 'q'
est en train de faire? Ce serait la matrice.longueur-1 représentent?Votre fonction recrée var array = [] sur chaque boucle/récursivité. Je ne suis pas sûr si la récursivité est le bon outil pour le travail dans votre cas, il ne semble pas comme elle, mais si vous êtes débutant avec JavaScript/développement et simplement de l'essayer, alors vous êtes fine.
Tout une "boucle infinie" est probablement ce que vous voulez vraiment, car il serait probablement rendre le code plus simple), vous pouvez le faire avec la récursivité par défaut de l'éventail et de la passer en argument à la fonction. Comme si...
Il y a deux problèmes avec le code que vous avez présenté. L'un, comme l'a souligné plus tôt, vous êtes la redéfinition de votre tableau de variable à chaque fois que vous appelez votre fonction. Deuxièmement, tableau.pop() modifie votre tableau, de sorte que lorsque vous obtenez le document.appel d'écriture, vous auriez l'impression d'un tableau vide de toute façon.