web-dev-qa-db-fra.com

Comment utiliser ES6 Fat Arrow pour .filter () un tableau d'objets

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; }
});
121
Henry Zhu

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;
});
201
Felix Kling

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);
42
Kit Sunde

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)
0
Mo.