Как вернуть анонимный объект из одной функции liner arrow в javascript? [дубликат]

этот вопрос уже есть ответ здесь:

недавно я переключился на es6 и начал использовать функции стрелки по всему моему коду. Во время рефакторинга я наткнулся ниже кода

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

Я изменил выше код на это -

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

но я получал ошибку сверху кода. Я не знаю, что здесь не так? Я знаю, что если нет блока кода, то есть неявное возвращение, предоставляемое функцией стрелки.

но не знаете, как вернуть пустой объект или Анонимный объект с некоторыми инициализированными свойствами ?

Edit:

что плохого, если я сделаю это таким образом? Просто из любопытства.

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

3 ответов


поместите parens вокруг инициализатора объекта:

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

скобки не влияют на значение выражения внутри их, но они do имеют синтаксический эффект устранения неоднозначности первого маркера содержащегося выражения. Без скобок синтаксический анализатор JavaScript должен решить, является ли { маркер означает " здесь запускается тело функции "или" здесь запускается инициализатор объекта.- Это! .. --7-->всегда выбирает первое (что есть блок кода).

введение скобок, следовательно, устраняет путаницу: единственное, что ведет ( может означать и "здесь приходит выражение", так что { внутри скобки могут быть только " здесь появляется инициализатор объекта."(Другими словами, вы не можете уронить блок кода в середине выражения; если вы попытаетесь, то получите синтаксическую ошибку.)


Привет, я думаю, вам нужно добавить paranthesis для возврата объекта literal

// заключите тело в скобки, чтобы вернуть выражение объектного литерала: params = > ({foo: bar})

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


вы также можете использовать

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