0
votes

Des idées pour attraper le dernier index dans un script for loop, où la longueur de l'index est inconnue?

Considérez ce qui suit pour la boucle (et en supposant que nous ne connaissons pas la table 3 fois - c'est-à-dire combien de résultats peuvent se produire).

<script summary>
function myFunction() {
  var output_text = "";
  var i;
  for (i = 0; i < 20; i++) {
    
    if (Number.isInteger(i/3)){
        if ("e.g. this is the last index?") {"e.g.then do this?"
        output_text += "This number is the last " + i ;
        }else{
        output_text += "The number is " + i + "<br>";
        }
    }
  }
  
}
</script>

Essayer de 'output_text' comme quelque chose comme:
Le nombre est 0
Le nombre est 3
Le nombre est 6
Le nombre est 9
Le nombre est 12
Le nombre est 15
Le nombre est le dernier 18

Toutes les idées pour savoir comment capturer cette dernière itération de boucle. Ceci n'est qu'un exemple car l'application réelle est un peu verbeuse - mais le concept est le même. Je pourrais exécuter un décompte en premier pour obtenir la longueur de l'index, mais je me suis demandé s'il y avait un moyen plus simple. Merci beaucoup pour le temps de tout le monde. Commencez également par publier - tout conseil est le bienvenu.


5 commentaires

Utilisez plutôt if (i% 3 == 0) . De cette façon, vous n'avez pas besoin de vérifier l'état des nombres entiers. % signifie module ou reste.


Mais votre question est trompeuse car votre dernier index est connu comme défini dans votre ligne de contrôle de boucle for, conditionnellement.


à l'intérieur de la boucle for après la condition if "if (Number.isInteger (i / 3))" il suffit de vérifier si (i + 3> n) 'n' vaut 20 dans votre cas, dans ce cas vous avez votre dernière valeur d'index


capturer de "bons" résultats dans un tableau, puis itérer ce tableau, et si l'itérateur est un de moins que la longueur du tableau, ajoutez "est le dernier" ...


Merci à tous pour le temps et les suggestions. L'exemple mathématique était juste cela, désolé sinon assez clair. iAmOren et Mukerram ont eu l'idée d'essayer d'attraper la dernière itération si le nombre de «bons» résultats est inconnu. Je vais expérimenter avec ça. J'ai déjà une solution en comptant d'abord, juste pas très élégante!


3 Réponses :


0
votes

Ajoutez simplement 3 à l'index actuel et vérifiez s'il dépasse 19.

function myFunction() {
  var output_text = "";
  var i;
  const max = 19;
  const factor = 3;
  for (i = 0; i <= max; i++) {
    if (i % factor === 0){
        if (i + factor > max) {
            output_text += "This number is the last " + i ;
        }else{
            output_text += "The number is " + i + "<br>";
        }
    }
  }
  return output_text;
}
document.write(myFunction());


0 commentaires

0
votes

Si vous avez un nombre divisible par 3, effectuez une deuxième vérification pour voir si 20 moins i

<div id="out"></div>
function myFunction() {
  var output_text = "";
  for (var i = 0; i < 20; i++) {   
    if (Number.isInteger(i/3)){
      if (20 - i < 3) {
        output_text += "This number is the last " + i ;
      }else{
        output_text += "The number is " + i + "<br>";
      }
    }
  }
  document.getElementById("out").innerHTML = output_text;
}

myFunction();


0 commentaires

0
votes

La meilleure approche consiste à afficher le résultat de l'itération actuelle dans l'itération suivante. Dans ce cas, la dernière itération ne sera pas gérée dans la boucle. Ainsi, vous pouvez le gérer facilement après.


0 commentaires