J'essaie d'utiliser la fonction de flèche ES6 avec .filter
pour renvoyer les adultes (Jack & Jill). Il semble que je ne peux pas utiliser une instruction if.
Que dois-je savoir pour faire cela dans ES6?
var family = [{"name":"Jack", "age": 26},
{"name":"Jill", "age": 22},
{"name":"James", "age": 5 },
{"name":"Jenny", "age": 2 }];
let adults = family.filter(person => if (person.age > 18) person); // throws error
(8:37) SyntaxError: unknown: Unexpected token (8:37)
|let adults = family.filter(person => if (person.age > 18) person);
Mon exemple de travail ES5:
let adults2 = family.filter(function (person) {
if (person.age > 18) { return person; }
});
Réponses:
Les fonctions fléchées permettent d'utiliser une expression ou un bloc comme corps. Passer une expression
équivaut au bloc suivant
cependant,
n'est pas une expression,
if
est une déclaration. Par conséquent, vous devrez utiliser un bloc, si vous vouliez utiliserif
dans une fonction de flèche:Bien que cela résout techniquement le problème, c'est une utilisation déroutante de
.filter
, car cela suggère que vous devez renvoyer la valeur qui devrait être contenue dans le tableau de sortie. Cependant, le rappel passé à.filter
doit retourner un booléen , c'est-à-diretrue
oufalse
, indiquant si l'élément doit être inclus dans le nouveau tableau ou non.Donc tout ce dont tu as besoin c'est
Dans ES5:
la source
false
outrue
, carperson.age > 18
est toujours soitfalse
outrue
.person
(bien sûr, elle ne le fait pas comme vous l'avez indiqué ...). Si votre première correction avait effectivement fait cela (foo => { if (person.age > 18) return person }
), vous obtiendriez l'équivalent exact de ce qu'OP utilisé dans le code ES5. Bien que ce soit un code déroutant, il fonctionne et résoudra le problème.return person
sera contraint àtrue
, et aucun retour ne «retournera»undefined
, ce qui sera contraint àfalse
..filter
. Voulez-vous dire les fonctions fléchées en général?Vous ne pouvez pas retourner implicitement avec un
if
, vous auriez besoin des accolades:Cela peut être simplifié:
la source
Aussi simple que vous pouvez utiliser
const adults = family.filter(({ age }) => age > 18 );
la source
Voici ma solution pour ceux qui utilisent
hook
; Si vous répertoriez des éléments dans votre grille et que vous souhaitez supprimer l'élément sélectionné, vous pouvez utiliser cette solution.la source