web-dev-qa-db-ja.com

javascriptの1つのライナー矢印関数から匿名オブジェクトを返す方法は?

最近、es6に切り替えて、コード全体で矢印関数の使用を開始しました。リファクタリング中に私はコードの下に出くわしました

data.map(function(d) {
   return {id: d.id, selected: bool};
});

上記のコードをこれに変更しました-

data.map((d) => {id: d.id, selected: bool});

しかし、上記のコードからエラーが発生していました。ここで何が間違っているのか分かりませんか?コードのブロックがない場合、矢印関数によって暗黙的なリターンが提供されることを知っています。

しかし、いくつかのプロパティが初期化された空のオブジェクトまたは匿名オブジェクトを返す方法がわかりませんか?

編集:

このようにするとどうなりますか?好奇心のためだけに。

data.map((d) => new {id: d.id, selected: bool});
33
WitVault

オブジェクト初期化子の周りに括弧を置きます:

data.map((d) => ({id: d.id, selected: bool}) );

括弧はその中の式の値には影響しませんが、doは、含まれている式の最初のトークンのあいまいさを排除する構文上の効果があります。括弧がないと、JavaScriptパーサーは{ tokenは、「ここから関数本体を開始する」または「ここからオブジェクト初期化子を開始する」ことを意味します。 It alwaysは前者(つまり、コードのブロック)を選択します。

したがって、括弧を導入すると混乱がなくなります。先頭の(は「ここに式が来る」ことを意味するため、{inside括弧は「ここにオブジェクト初期化子が来る」のみです。 (つまり、式の途中にコードのブロックをドロップすることはできません。言い換えると、構文エラーが発生します。)

67
Pointy

こんにちは、オブジェクトリテラルを返すには、括弧を追加する必要があると思います

//本体を括弧で囲んでオブジェクトリテラル式を返します:params =>({foo:bar})

from https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

1
saurabh vyas