映射到lambda函数JavaScript中的对象-为什么';没有帕伦斯不行吗?
我正在节点中运行以下命令,无法理解为什么一个可以工作,而另一个不能。这里有一个数组s,其中s=[1,2,3,4]。我想将每个数字映射到一个对象。我已经尝试了很长时间:映射到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.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`
});