1
votes

Devrait renvoyer une valeur à la fin de la fonction de flèche array-callback-return sur la fonction de filtre

Je travaille dans React et j'obtiens actuellement l'erreur "Devrait renvoyer une valeur à la fin de la fonction de flèche array-callback-return". J'ai cherché d'autres questions, mais je n'arrive pas à en trouver une qui corresponde à min (à moins que je ne sois totalement aveugle). J'ai le code suivant.

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
    for(const measure of self.state.measures) {
      if(measure.id === companyMeasure.measure_type_id) return true;
      else return false;
    }
  });

Le code parcourt deux tableaux d'objets à la recherche d'une correspondance entre les deux. Si je n'avais renvoyé true que pour les correspondances, j'aurais compris l'erreur. Cependant, je renvoie false dans le cas où il n'y a pas de correspondance. En conséquence, j'ai du mal à voir comment je me retrouverais dans une situation où il n'y a pas de valeur de retour à la fin de la fonction de flèche.


1 commentaires

La méthode de filtrage ne retourne sur arrayOfValue que si la condition est satisfaite.


3 Réponses :


0
votes

Soit:

  1. La boucle démarre
  2. Vous obtenez la première mesure
  3. La condition est vraie et vous renvoyez vrai
  4. Vous ne passez jamais à la deuxième mesure

Ou:

  1. La boucle démarre
  2. Vous obtenez la première mesure
  3. La condition est fausse et vous renvoyez faux
  4. Vous ne passez jamais à la deuxième mesure

Débarrassez-vous du else et déplacez le return false vers après la boucle afin qu'elle ne s'exécute que si vous arrivez à la fin du boucle sans trouver de correspondance.


0 commentaires

4
votes

C'est parce que le return quitte uniquement la boucle for , et non le rappel complet dans Array.prototype.filter () . Au lieu d'utiliser la boucle for pour vérifier si companyMeasure.measure_type_id existe dans self.state.measures , vous pouvez simplement faire un array map , qui renvoie tous les ID, puis vérifiez par rapport à ce tableau de retour si le ID existe en utilisant Array.prototype. inclut :

const ids = this.state.measures.map(m => m.id);
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => id.includes(companyMeasure.measure_type_id));

Encore mieux:

  • puisque vous utilisez des fonctions fléchées, le this lexical de la portée englobante est conservé, vous n'avez donc même pas besoin de proxy this du tout
  • vous pouvez également créer la carte du tableau en dehors du rappel .filter () pour réduire la surcharge
  • maintenant le rappel .filter () est une ligne unique, nous pouvons nous débarrasser des accolades et tirer parti des retours implicites dans les fonctions fléchées

Voici à quoi devrait ressembler le code final:

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
    return self.state.measures.map(m => m.id).includes(companyMeasure.measure_type_id);
  });


1 commentaires

@ user48003 Pas de problème! Tout le monde commence quelque part;) heureux que cela ait fonctionné pour vous.



0
votes

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
             return self.state.measures.map(meas => meas.id).indexOf(companyMeasure.measure_type_id)!=-1
    }
   );

Essayez ceci


0 commentaires