Tim*_*eng 6 javascript arrays object ecmascript-6
我正在节点中运行以下命令,但无法理解为什么一个有效而另一个无效。这里我有一个数组 s,其中 s = [1, 2, 3, 4]。我想将每个数字映射到一个对象。我已经尝试这个很长时间了:
s.map(i => {name: i})
Run Code Online (Sandbox Code Playgroud)
它返回一个未定义的列表。
最后我意识到它与括号一起工作:
s.map(i => ({name: i}))
Run Code Online (Sandbox Code Playgroud)
这提供了我想要的输出:[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 } ]
我觉得有一个 JavaScript 概念我不理解。为什么这不起作用?
Jac*_*ord 10
这是因为=> {代表一个块函数,而不是返回一个对象。
将对象括在括号中不会执行任何操作,它只是中断该模式=> {,这意味着它被解释为简洁的箭头函数而不是块箭头函数,并且您可以返回该对象。
因此,如果你想返回一个对象,你可以将它括在括号中(这是最简单的方法):
s.map(i => ({ name: i }));
Run Code Online (Sandbox Code Playgroud)
或者使用块函数:
s.map(i => {
return { name: i };
});
Run Code Online (Sandbox Code Playgroud)
name(顺便说一句,您可以通过作为参数名称传入来使您的函数更加简洁map:
s.map(name => ({ name }));
Run Code Online (Sandbox Code Playgroud)
正如下面Tomasz所指出的,您第一次尝试返回列表的原因undefined是因为JavaScript 中标签name:的语法- 并且您只是标记然后声明变量- 所以您的代码基本上看起来像这样的 ES5:name:i
s.map(function(i) {
name: i
// No return so it returns `undefined`
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9992 次 |
| 最近记录: |