如何使用 ES6脂肪箭头。过滤()对象数组

我试图使用 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; }
});
258588 次浏览

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

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

不过,这个问题可以简单化:

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

看来我不能使用 if 语句。

箭头函数允许使用 表情 或者 a 拦截作为它们的主体

foo => bar

等效于下面的代码块

foo => { return bar; }

但是,

if (person.age > 18) person

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

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

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

所以你只需要

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

在 ES5:

family.filter(function (person) {
return 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)

在方法中编写这个函数并调用它

另一个好的选择是使用三元运算符,如映射中的过滤器,并使用过滤器去掉空值

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