1. ホーム
  2. javascript

[解決済み] ES6 Fat Arrowを使用してオブジェクトの配列を.filter()する方法

2022-05-02 07:53:14

質問

ES6のarrow関数を .filter を使用して、大人(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;
});