javascript - 如何使用 ES6 Fat Arrow .filter() 对象数组

标签 javascript ecmascript-6 higher-order-functions

我正在尝试将 ES6 箭头函数与 .filter 一起使用以返回成人 (Jack & Jill)。看来我不能使用 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; }
});

最佳答案

It appears I cannot use an if statement.

箭头函数允许使用表达式 block 作为它们的主体。传递表达式

foo => bar

相当于下面的 block

foo => { return bar; }

但是,

if (person.age > 18) person

不是表达式,if 是语句。因此,如果您想在箭头函数中使用 if,则必须使用代码块:

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

虽然这在技术上解决了问题,但这是对 .filter 的一种混淆使用,因为它表明您必须返回应包含在输出数组中的值。但是,传递给 .filter 的回调应该返回一个 Boolean,即 truefalse,指示元素是否是否应包含在新数组中。

所以你只需要

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

在 ES5 中:

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

关于javascript - 如何使用 ES6 Fat Arrow .filter() 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040396/

相关文章:

javascript - 如何在 yield 上修复 "Uncaught SyntaxError: Unexpected identifier"

php - 如何从映射中指定数组键

javascript - 不能简单地使用 ES6 Promise 来更新 ng-repeat 中的数据吗?

javascript - 带有 *this* 的简写属性名称

javascript - 注入(inject)具有副作用的功能

haskell - 如何在 Haskell 中修改状态的一部分

JavaScript 正则表达式 : match and identify alternative delimiters and capture surrounding text

javascript - Antd提示框悬停后如何消失?

javascript - 在 Vue 路由器路径中使用正则表达式

javascript - 如何通过innerHTML设置选择标签选项?