Как использовать 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; }
});
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