Я пытаюсь использовать функцию стрелки 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; }
});
javascript
ecmascript-6
higher-order-functions
Генри Чжу
источник
источник
Ответы:
Стрелка функции либо позволяют использовать выражение или в блок , как их тело. Передача выражения
эквивалентно следующему блоку
Тем не мение,
это не выражение,
if
это утверждение. Следовательно, вам придется использовать блок, если вы хотите использоватьif
в функции стрелки:Хотя это технически решает проблему, это запутанное использование
.filter
, потому что предполагает, что вы должны возвращать значение, которое должно содержаться в выходном массиве. Однако переданный обратный вызов.filter
должен возвращать логическое значение , т. Е.true
Илиfalse
, указывающее, должен ли элемент быть включен в новый массив или нет.Так что все, что вам нужно, это
В ES5:
источник
false
илиtrue
, такperson.age > 18
как всегда либо либо,false
либоtrue
.person
(конечно, она не делает этого, как вы указали ...). Если бы ваша первая поправка действительно сделала это (foo => { if (person.age > 18) return person }
), вы бы получили точный эквивалент того, что OP использовал в коде ES5. Хотя это запутанный код, он работает и решит проблему.return person
будет принудительноtrue
возвращаться, а возврат не будет «возвращаться»undefined
, что будет принудительно выполненоfalse
..filter
. Вы имеете в виду функции стрелок в целом?Вы не можете неявно вернуться с
if
, вам понадобятся фигурные скобки:Это может быть упрощено, хотя:
источник
Так просто, как вы можете использовать
const adults = family.filter(({ age }) => age > 18 );
источник
Вот мое решение для тех, кто использует
hook
; Если вы перечисляете элементы в своей сетке и хотите удалить выбранный элемент, вы можете использовать это решение.источник