如何使用ES6胖箭头.filter()对象数组

我试图使用ES6箭头函数与.filter返回成年人(杰克和吉尔)。 看来我不能使用if语句。

我需要知道什么才能在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); 

我工作的ES5的例子:

 let adults2 = family.filter(function (person) { if (person.age > 18) { return person; } }); 

看来我不能使用if语句。

箭头函数允许使用expression式 作为它们的主体。 传递一个expression式

 foo => bar 

相当于下面的块

 foo => { return bar; } 

然而,

 if (person.age > 18) person 

不是一个expression, if是一个声明。 因此,如果你想在箭头函数中使用,你将不得不使用一个块:

 foo => { if (person.age > 18) return person; } 

虽然这在技术上解决了这个问题,但这是一个令人困惑的使用.filter ,因为它表明你必须返回应该包含在输出数组中的值。 但是,传递给.filter的callback.filter应该返回一个布尔值 ,也就是true或者false ,表示元素是否应该包含在新数组中。

所以你需要的是

 family.filter(person => person.age > 18); 

在ES5中:

 family.filter(function (person) { return person.age > 18; }); 

你不能隐式地返回一个if ,你需要大括号:

 let adults = family.filter(person => { if (person.age > 18) return person} ); 

它可以被简化:

 let adults = family.filter(person => person.age > 18);