繁体   English   中英

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

[英]How to use ES6 Fat Arrow to .filter() an array of objects

我正在尝试使用带有.filter的 ES6 箭头 function 来返回成年人(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; }
});

看来我不能使用 if 语句。

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

foo => bar

相当于下面的块

foo => { return bar; }

然而,

if (person.age > 18) person

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

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

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

所以你只需要

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);

尽可能简单地使用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)

这是我为那些使用hook人提供的解决方案; 如果您在网格中列出项目并希望删除所选项目,则可以使用此解决方案。

var list = data.filter(form => form.id !== selectedRowDataId);
setData(list);
return arrayname.filter((rec) => rec.age > 18)

在方法中写这个并调用它

另一个不错的选择是使用三元运算符,如 map 中的过滤器,并使用过滤器去除空值

 var family = [{"name":"Jack", "age": 26}, {"name":"Jill", "age": 22}, {"name":"James", "age": 5 }, {"name":"Jenny", "age": 0 }]; let adults = family.map(person => person.age < 18?person:null).filter(Boolean); // or if you are afraid about filter(Boolean) you could use filter(person => person;= null). adults.forEach(element => console log(element))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM