私は大人を返すために.filter
と一緒にES6のarrow関数を使おうとしています(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文は使えないようです。
矢印関数では、式またはaブロックを使用できます。彼らの体として。式を渡す
foo => bar
次のブロックと同等です
foo => { return bar; }
しかしながら、
if (person.age > 18) person
式ではない場合、if
はステートメントです。そのため、if
を矢印関数で使用したい場合は、ブロックを使用する必要があります。
foo => { if (person.age > 18) return person; }
技術的には問題が解決しますが、これは.filter
の混乱した使用法です。出力配列に含まれるべき値を返さなければならないことを示唆しているからです。しかしながら、.filter
に渡されたコールバックは、ブール、すなわちtrue
またはfalse
を返して、要素を新しい配列に含めるべきかどうかを示します。
だから必要なのはそれだけです
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)