J'essaie d'utiliser la fonction de flèche ES6 avec .filter
pour renvoyer des 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; }
});
Il semble que je ne peux pas utiliser une instruction if.
Les fonctions fléchées permettent soit d'utiliser un expression ou un bloc comme corps. En passant une expression
foo => bar
est équivalent au bloc suivant
foo => { return bar; }
Cependant,
if (person.age > 18) person
n'est pas une expression, if
est une instruction. Par conséquent, vous devriez utiliser un bloc si vous voulez utiliser if
dans une fonction de flèche:
foo => { if (person.age > 18) return person; }
Tandis que cela résout techniquement le problème, ceci est une utilisation déroutante de .filter
, car il suggère que vous deviez renvoyer la valeur qui devrait être contenue dans le tableau en sortie. Cependant, le rappel transmis à .filter
devrait renvoyer un booléen , c’est-à-dire true
ou false
, indiquant si le L'élément doit être inclus ou non dans le nouveau tableau.
Donc tout ce dont vous avez besoin c'est
family.filter(person => person.age > 18);
Dans ES5:
family.filter(function (person) {
return person.age > 18;
});
Vous ne pouvez pas implicitement retourner avec un if
, vous auriez besoin des accolades:
let adults = family.filter(person => { if (person.age > 18) return person} );
Il peut être simplifié si:
let adults = family.filter(person => person.age > 18);
Aussi simple que vous pouvez utiliser const adults = family.filter(({ age }) => age > 18 );
const family =[{"name":"Jack", "age": 26},
{"name":"Jill", "age": 22},
{"name":"James", "age": 5 },
{"name":"Jenny", "age": 2 }];
const adults = family.filter(({ age }) => age > 18 );
console.log(adults)