Как использовать ES6 Fat Arrow to.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; }
});
530   2  

2 ответов:

кажется, я не могу использовать оператор if.

функции стрелки позволяют использовать выражениеили a блок как их тела. Передача выражения

foo => bar

эквивалентно следующему блоку

foo => { return bar; }

однако,

if (person.age > 18) person

это не выражение, if это заявление. Поэтому вам придется использовать блок, если вы хотите использовать if в функция стрелки:

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

хотя это технически решает проблему, это запутанное использование .filter, потому что это предполагает, что вы должны вернуть значение, которое должно содержаться в выходной массив. Однако обратный вызов передается в .filter возвращает Boolean, т. е. true или false, указывая, должен ли элемент быть включен в новый массив или нет.

так что все, что вам нужно, это

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

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

Comments

    Ничего не найдено.