web-dev-qa-db-ja.com

ES6のFat Arrowを使ってオブジェクトの配列を.filter()する方法

私は大人を返すために.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; }
});
115
Henry Zhu

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;
});
190
Felix Kling

暗黙のうちにifを返すことはできません。中括弧が必要になります。

let adults = family.filter(person => { if (person.age > 18) return person} );

それは単純化することができます:

let adults = family.filter(person => person.age > 18);
37
Kit Sunde

できるだけ簡単に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)
0
Mo.