javascript - 映射到 lambda 函数 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 => ({ name: i }));
或使用块功能:
s.map(i => {
return { name: i };
});
(附带说明,您可以通过name
作为map
参数名称传入来使函数更简洁:
s.map(name => ({ name }));
正如下面Tomasz所指出的,您第一次尝试返回列表的undefined
原因是 JavaScript 中标签name:
的语法- 而您只是在标记然后声明变量- 所以您的代码基本上看起来像这样的 ES5:name:
i
s.map(function(i) {
name: i
// No return so it returns `undefined`
});