-1
votes

Ma boucle ne produit que le dernier résultat, puis-je changer cela?

Alors j'essaie de comprendre pour des boucles un peu plus mais je me demandais s'il y a un moyen de retourner chaque itération de la boucle plutôt que du résultat final?

Je sais que je pouvais juste énumérer les articles séparément mais je "D Aimez comprendre une manière où je peux le faire plus efficacement et au cas où il y avait un grand nombre d'objets dans un tableau. xxx


3 commentaires

Votre code doit renvoyer la première valeur, pas le dernier


Qu'essayez-vous de faire? Voulez-vous une liste de chiffres retournés? Que vous attendez-vous si vous retour une valeur dans une boucle? Que retour est immédiatement hors de la boucle.


pour La boucle n'a pas de valeur de retour, elle exécute simplement son corps et, après cela, l'exécution est poursuivie de l'énoncé suivant après la boucle. retour retourne de la fonction et votre boucle ne sera jamais itérale à travers tous les membres de la matrice.


3 Réponses :


2
votes

Vous ne pouvez pas revenir d'une fonction normale qui sorta immédiatement de la boucle lorsque vous émettez le retour code>; Sauf si vous utilisez une fonction de générateur, indiquée par le mot-clé code> de fonction code> suivi d'un astérisque IE fonction * code> syntaxe.

Ceci est selon votre condition que vous ne voulez pas Les articles à répertorier: P>

Je sais que je pourrais juste énumérer les articles séparément, mais j'aimerais comprendre sur une façon où je peux le faire plus efficacement p> blockQquote>

donc en cas de fonction génératrice, la valeur de rendement code> renvoie réellement une valeur code> et met en pause l'exécution de la fonction d'exécution et ne sort pas du boucle: p>

p>

function* gen(){ //Note the asterisk
   yield 1; //pauses after each next() call
   yield 2;
   yield 3;
   return "completed";
}

const iterable = gen();// returns a iterable
const one = iterable.next();// get the first value {value: value, done: boolean}
console.log(one.value);
const two = iterable.next(); //loop resumed till yield 3
console.log(two.value);
const three = iterable.next();
console.log(three.value); //all values yielded
const final = iterable.next();
console.log(final.value); // value of the return statement
console.log(final.done); //done is true 


3 commentaires

Bien que cela puisse fonctionner, je ne suis pas sûr que cela aide l'OP. L'OP ne comprend pas les boucles (par son propre admission), alors je ne suis pas sûr d'introduire un concept comme des fonctions de générateur et un rendement , aidera.


@Cerbrus je vais ajouter quelques explications sous peu!


Ceci est plutôt utile et éclairant en termes de compréhension de certains aspects de la langue. Merci pour l'aide malade de vous assurer de déconstruire ce que j'ai appris à comprendre certains aspects un peu mieux.



0
votes

Pour renvoyer chaque valeur, vous pouvez utiliser un supplément Résultats CODE> CODE> STROND> Tableau que vous remplissez à l'aide de Push () Code> Strong> Comme vous allez:

p>

function average(array) {
  return array.map(item => item.number / array.length);
}

const array = [
  { user: 'a', number: 20 },
  { user: 'b', number: 21 },
  { user: 'c', number: 22 }
];

console.log(average(array));


1 commentaires

Je soupçonne quelque chose de simple comme un mappe est ce que l'OP recherche, bien que vraiment, cette question devrait être fermée comme "peu claire" ...



0
votes

La voie la plus simple, aussi loin que je le compri, utiliserait JavaScript, code>: xxx pré>

si vous ne voulez pas utiliser Réduire CODE> et un peu plus facile à lire: P>

let sum = 0;
array.forEach(obj => { sum += obj.number });
const average = sum / array.length;


0 commentaires