Reputation: 119
Why does
['a', 'b', 'c'].map((x) => { letter: x })
returns a array of undefined
and
['a', 'b', 'c'].map((x) => [{ letter: x }][0])
returns a array of objects correctly?
Upvotes: 3
Views: 1962
Reputation: 68
A function that lacks an explicit return statement will return undefined.
() => {}
is equivalent to function(){}
.
x => x
is equivalent to function(x){ return x;}
So arrow function without {}
will return computed value of the expression.
Upvotes: 1
Reputation: 386848
Because
You use the curly brackets as block statement.
You have letter
as a label.
x
is just a value without some action.
The return of undefined
is the standard return value of a function without any return statement with value.
To return a value other than the default, a function must have a
return
statement that specifies the value to return. A function without a return statement will return a default value. In the case of a constructor called with thenew
keyword, the default value is the value of its this parameter. For all other functions, the default return value is undefined.
Correct call for mapping objects.
console.log(['a', 'b', 'c'].map(x => ({ letter: x })));
Upvotes: 2
Reputation: 122115
You need to wrap object in ()
var result = ['a', 'b', 'c'].map((x) => ({ letter: x }))
console.log(result)
Upvotes: 2