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.
3 Réponses :
Soit:
mesure
mesure
Ou:
mesure
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.
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:
this
lexical de la portée englobante est conservé, vous n'avez donc même pas besoin de proxy this
du tout .filter ()
pour réduire la surcharge .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); });
@ user48003 Pas de problème! Tout le monde commence quelque part;) heureux que cela ait fonctionné pour vous.
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
La méthode de filtrage ne retourne sur arrayOfValue que si la condition est satisfaite.