Как вернуть анонимный объект из одной функции стрелки лайнера в 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});
Ответы
Ответ 1
Поместите парсеры вокруг инициализатора объекта:
data.map((d) => ({id: d.id, selected: bool}) );
Круглые скобки не влияют на значение выражения внутри них, но у них есть синтаксический эффект устранения двусмысленности первого токена содержащегося выражения. Без круглых скобок парсер JavaScript должен решить, означает ли токен {
"Здесь начинается тело функции" или "Здесь начинается инициализатор объекта". Он всегда выбирает первый (то есть блок кода).
Вводя круглые скобки, поэтому устраняет путаницу: единственное, что может означать ведущий (
, это "здесь приходит выражение", так что {
внутри круглых скобок может быть только "здесь идет инициализатор объекта." (Вы не можете отбросить блок кода в середине выражения, другими словами, если вы попытаетесь, вы получите синтаксическую ошибку.)
Ответ 2
Привет, я думаю, вам нужно добавить paranthesis для возврата литерала объекта
//Parenthesize тело, чтобы вернуть выражение объекта буквально:
params = > ({foo: bar})
из https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Ответ 3
Вы также можете использовать
data.map((d) => {
return {id: d.id, selected: bool}
} );