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?
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
returnstatement 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 thenewkeyword, 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 })));
You need to wrap object in ()
var result = ['a', 'b', 'c'].map((x) => ({ letter: x }))
console.log(result)