为什么Array#map没有返回正确的数组?

时间:2017-05-09 13:05:25

标签: javascript arrays ecmascript-6

当我写这样的东西时:

var x = [1,2,3].map(x => { a : 'hello' });

我希望收到类似[{a:'hello'},{a:'hello'},{a:'hello'}]的内容,但会返回undefined的列表。这是为什么?

enter image description here

4 个答案:

答案 0 :(得分:7)

“对象”被视为,因为arrow functions具有多个可接受的语法。它们包含一个包含多个语句的块:

param1 => { statements }
(param1, param2, …, paramN) => { statements }

实际上,您当前的代码被解释为具有label和字符串表达式的块,而不是对象文字。因此,您的回调函数不会返回任何内容,并且您的数组将成为undefined s。

的数组

将其包装在括号中,使其是表达式并解释为对象文字(因为块不是表达式,它们是语句,分组内的代码必须是表达式):

var x = [1,2,3].map(x => ({ a : 'hello' }));

答案 1 :(得分:3)

你需要在对象周围加上一些括号,否则你会得到block statement label

要防止箭头函数中的块语句,您需要使用grouping operator将表达式作为返回值。



var x = [1, 2, 3].map(x => ({ a: 'hello' }));

console.log(x);




答案 2 :(得分:1)

您需要将返回的对象放在括号中:

var x = [1,2,3].map(x => ({ a : 'hello' }));

否则,花括号中的代码将被视为函数体。

答案 3 :(得分:0)

var x = [1,2,3].map(x => ({ a : 'hello' }));