Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射到lambda函数JavaScript中的对象-为什么';没有帕伦斯不行吗?_Javascript_Arrays_Object_Ecmascript 6 - Fatal编程技术网

映射到lambda函数JavaScript中的对象-为什么';没有帕伦斯不行吗?

映射到lambda函数JavaScript中的对象-为什么';没有帕伦斯不行吗?,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我正在节点中运行以下命令,无法理解为什么一个可以工作,而另一个不能。这里有一个数组s,其中s=[1,2,3,4]。我想将每个数字映射到一个对象。我已经尝试了很长时间: s.map(i => {name: i}) 它返回一个未定义的列表 最后我意识到它与括号一起工作: s.map(i => ({name: i})) 这提供了我想要的输出:[{name:1},{name:2},{name:3},{name:4}] 我觉得有一个JavaScript概念我不理解。为什么不起作用?这是因为

我正在节点中运行以下命令,无法理解为什么一个可以工作,而另一个不能。这里有一个数组s,其中s=[1,2,3,4]。我想将每个数字映射到一个对象。我已经尝试了很长时间:

s.map(i => {name: i})
它返回一个未定义的列表

最后我意识到它与括号一起工作:

s.map(i => ({name: i}))
这提供了我想要的输出:
[{name:1},{name:2},{name:3},{name:4}]


我觉得有一个JavaScript概念我不理解。为什么不起作用?

这是因为
=>{
表示块函数,而不是返回对象

将对象括在括号中没有任何作用,它只是中断模式
=>{
,这意味着它被解释为一个简洁的箭头函数,而不是块箭头函数,您可以返回该对象

因此,如果要返回对象,可以将其括在括号中(这是最简单的方法):

或使用块函数:

s.map(i => {
  return { name: i };
});
(另一方面,您可以通过将
名称
作为
映射
参数名称传入,使函数更加简洁:

s.map(name => ({ name }));
正如下面所指出的,您第一次尝试返回一个未定义的
列表的原因是
名称:
是JavaScript中a的语法-您只是标记
名称:
,然后声明变量
i
-因此您的代码基本上类似于ES5:

s.map(function(i) {
  name: i
  // No return so it returns `undefined`
});

正确,在该示例中,代码块有一个标签“name”。该块中没有return语句,因此返回值是
undefined
Yes@Tomasz-仅此而已!
s.map(function(i) {
  name: i
  // No return so it returns `undefined`
});