One of the new features of ES6 that has made it into Node 4 is arrow functions. According to the documentation, there are 2 alternative syntaxes:
(param1, param2, …, paramN) => { statements } (param1, param2, …, paramN) => expression // equivalent to: => { return expression; }
Using the 2nd version works as expected for primitive values:
> [1,2,3].map(i => i); [ 1, 2, 3 ]
but not when you return an object:
> [1,2,3].map(i => { id: i }); [ undefined, undefined, undefined ]
As was pointed out to me on SO, it’s impossible to tell the difference between a statement block and an expression consisting of an object literal.
The solution is to wrap the returned object in an extra set of parentheses:
> [1,2,3].map(i => ({ id: i })); [ {id: 1}, {id: 2}, {id: 3} ]
One thought on “Arrow functions returning an expression”